Non, il ne devrait pas y avoir de différence. EXISTS
se retire dès qu'il a trouvé une seule ligne correspondante. C'est pourquoi il est toujours préféré par ex. (select COUNT(*) from ...) > 0
- un COUNT
forcerait toutes les lignes à être prises en compte.
Si vous créez les quatre requêtes suivantes :
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)
Et activez les plans d'exécution, vous verrez que la deuxième requête génère un plan d'exécution qui inclut un TOP
opérateur. Les 3ème et 4ème requêtes produisent identique des plans. Le TOP
est ignoré.