Jens, meine Antwort unter Deiner war mißverständlich, aber Du warst schon gemeint. Hach ich bin eben etwas ruppig, manchmal.
Du hast mir beim Frühstückskäffchen einen kalten Lappen ins Gesicht geklatscht. Schuft!
where b. ...
führt im besten Fall zu einen Full Index Scan in A und B. Im schlimmsten Fall wird die Abfrage intern als Cross Join ausgeführt.
Nein. Ich schrieb ...
SQL-Code:
--- Vorschlag #2 (meiner!)
Select *
from #A a
left join #B b
on b.ID1=a.ID1
and b.ID2 is null
-- nicht von mir where b.ID2 is null
where a.ID2 is null
Der Code wird in der Regel optimierter ausgeführt, wenn die Where Klausel den äußeren "Select" filtert und die Datenmenge der Joins mit Conditions dezimiert wird.
Dein
MSSQL testet versucht mal den inneren, mal den äußeren Teil als erstes auszuführen und merkt sich den optimaleren Weg für alle weiteren Abfragen. Ob der Firebird des Fragestellers dies auch kann weiß ich leider nicht.