Un Explain Plan
te habría mostrado por qué exactamente deberías usar Exists . Por lo general, la pregunta surge Exists vs Count(*) . Exists es más rápido. ¿Por qué?
-
Con respecto a los desafíos presentados por NULL:cuando la subconsulta devuelve
Null, para IN toda la consulta se convierte enNull. Entonces también debes manejar eso. Pero usandoExist, es simplemente unfalse. Mucho más fácil de sobrellevar. SimplementeINno se puede comparar nada conNullperoExistspuede. -
p.ej.
Exists (Select * from yourtable where bla = 'blabla');obtienes verdadero/falso en el momento en que se encuentra/coincide una coincidencia . -
En este caso
INmás o menos toma la posición deCount(*)para seleccionar TODO filas coincidentes basadas enWHEREporque está comparando todos los valores.
Pero tampoco olvides esto:
EXISTSse ejecuta a alta velocidad contraIN:cuando los resultados de la subconsulta son muy grandes.INse adelanta aEXISTS:cuando los resultados de la subconsulta son muy pequeños.
Referencia a para más detalles: