The problem Joe spotted is that a variable name is misspelled in one place. It should (probably) be external_complete_id, not _external_complete_id).
Oh, copy-paste issue :-)
> better solution proposal?
I think you can make that clearer by using IS [NOT] DISTINCT FROM:
SELECT ... simple join of two tables... WHERE opd.id_data_provider = _id_data_provider AND external_id IS NOT DISTINCT FROM _external_id AND external_complete_id IS NOT DISTINCT FROM _external_complete_id ;
However, your version may be faster, as last time I looked (it's been some time) the optimizer wasn't especially good at handlung DISTINCT FROM (probably because it's so rarely used).g
Distinct from was the original version, but it ignores indexes, 130ms vs 0.3 ms, you are absolutely correct.