Um
Plano de explicação
teria mostrado porque exatamente você deveria usar Exists . Geralmente a pergunta vem Exists vs Count(*) . Existe é mais rápido. Por quê? -
Com relação aos desafios apresentados por NULL:quando subconsulta retornaNull, para IN a consulta inteira se tornaNull. Então você precisa lidar com isso também. Mas usandoExist, é apenas umfalse. Muito mais fácil de lidar. SimplesmenteINnão pode comparar nada comNullmasExisteposso.
-
por exemplo.Existe (Selecione * de sua tabela onde bla ='blabla');você obtém verdadeiro/falso no momento em que um resultado é encontrado/combinado .
-
Neste casoINmeio que toma a posição doCount(*)para selecionar TODOS linhas correspondentes com base emWHEREporque está comparando todos os valores.
Mas também não se esqueça disso:
EXISTEé executado em alta velocidade emIN:quando os resultados da subconsulta são muito grandes.EMfica à frente deEXISTS:quando os resultados da subconsulta são muito pequenos.
Consulte para obter mais detalhes: