EXISTS se utiliza para devolver un valor booleano, JOIN devuelve otra tabla completa
EXISTS solo se usa para probar si una subconsulta devuelve resultados y cortocircuitos tan pronto como lo hace. JOIN se utiliza para ampliar un conjunto de resultados combinándolo con campos adicionales de otra tabla con la que existe una relación.
En su ejemplo, las consultas son semánticamente equivalentes.
En general, use EXISTS cuando:
- No necesita devolver datos de la tabla relacionada
- Tiene duplicados en la tabla relacionada (
JOINpuede causar filas duplicadas si los valores se repiten) - Desea verificar la existencia (usar en lugar de
LEFT OUTER JOIN...NULLcondición)
Si tiene índices adecuados, la mayoría de las veces EXISTS funcionará de manera idéntica a JOIN . La excepción es en subconsultas muy complicadas, donde normalmente es más rápido usar EXISTS .
Si tu JOIN la clave no está indexada, puede ser más rápido usar EXISTS pero deberá realizar una prueba para su circunstancia específica.
JOIN la sintaxis es más fácil de leer y más clara normalmente también.