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 (
JOIN
puede causar filas duplicadas si los valores se repiten) - Desea verificar la existencia (usar en lugar de
LEFT OUTER JOIN...NULL
condició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.