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. SimplementeIN
no se puede comparar nada conNull
peroExists
puede. -
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
IN
más o menos toma la posición deCount(*)
para seleccionar TODO filas coincidentes basadas enWHERE
porque está comparando todos los valores.
Pero tampoco olvides esto:
EXISTS
se ejecuta a alta velocidad contraIN
:cuando los resultados de la subconsulta son muy grandes.IN
se adelanta aEXISTS
:cuando los resultados de la subconsulta son muy pequeños.
Referencia a para más detalles: