Ne, neměl by v tom být žádný rozdíl. EXISTS
vyplácí, jakmile najde jediný odpovídající řádek. Proto je vždy upřednostňována např. (select COUNT(*) from ...) > 0
- COUNT
by vynutilo zohlednění všech řádků.
Pokud vytvoříte následující čtyři dotazy:
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)
A zapněte prováděcí plány, uvidíte, že druhý dotaz vygeneruje prováděcí plán, který obsahuje TOP
operátor. 3. a 4. dotaz produkuje identické plány. TOP
je ignorováno.