Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A alteração de IF EXIST(SELECT 1 FROM ) para IF EXIST(SELECT TOP 1 FROM ) tem algum efeito colateral?


Não, não deve haver diferença. EXISTS sai assim que encontra uma única linha correspondente. É por isso que é sempre preferível, por exemplo, (select COUNT(*) from ...) > 0 - um COUNT forçaria todas as linhas a serem consideradas.

Se você criar as quatro consultas a seguir:
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)

E ative os planos de execução, você verá que a segunda consulta gera um plano de execução que inclui um TOP operador. As 3ª e 4ª consultas produzem idênticos planos. O TOP é ignorado.