Nie, nie powinno być żadnej różnicy. EXISTS
wycofuje się, gdy tylko znajdzie jeden pasujący rząd. Dlatego zawsze jest preferowany nad m.in. (select COUNT(*) from ...) > 0
- COUNT
wymusiłoby uwzględnienie wszystkich wierszy.
Jeśli utworzysz następujące cztery zapytania:
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)
I włącz plany wykonania, zobaczysz, że drugie zapytanie generuje plan wykonania, który zawiera TOP
operator. Zapytania 3. i 4. generują identyczne plany. TOP
jest ignorowany.