Nein, es sollte keinen Unterschied geben. EXISTS
springt aus, sobald es eine einzige passende Zeile gefunden hat. Deshalb wird es z.B. immer vorgezogen. (select COUNT(*) from ...) > 0
- ein COUNT
würde erzwingen, dass alle Zeilen berücksichtigt werden.
Wenn Sie die folgenden vier Abfragen erstellen:
select * from sys.objects
select top 1 * from sys.objects
select 1 where exists(select * from sys.objects)
select 1 where exists(select top 1 * from sys.objects)
Wenn Sie Ausführungspläne aktivieren, sehen Sie, dass die zweite Abfrage einen Ausführungsplan generiert, der ein TOP
enthält Operator. Die 3. und 4. Abfrage ergeben identisch Pläne. Die TOP
wird ignoriert.