Dass der EXISTS-Operator an sich sehr effizient implementiert werden kann, ist sicher korrekt. Die Variante von omata hat aber den Nachteil, dass die Subquery abhängig ist von der äußeren
Query, weshalb sie für jedes Ergebnistupel der äußeren
Query einmal ausgeführt werden muss. Das ist der Grund, warum es sich normalerweise empfiehlt, abhängige Subqueries zu vermeiden.
Eine andere Subquery-Variante wäre übrigens die folgende:
SQL-Code:
select *
from tabelle1
where PK not in (select FK from tabelle2)
Diese dürfte von der Performance her dem Vorschlag von alzaimar entsprechen, weil
DB-Intern ein Join draus wird. Wenn über PK und FK je ein Index existiert, kann dieser sehr effizient ausgeführt werden.
Ich persönlich finde die Subquery-Variante etwas übersichtlicher, aber das ist Geschmack- und Gewohnheitssache.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)