El enlace de Joe es un buen punto de partida. Quassnoi también cubre esto.
En general, si sus campos están indexados correctamente, O si espera filtrar más registros (es decir, tiene muchas filas EXIST
en la subconsulta) NOT EXISTS
funcionará mejor.
EXISTS
y NOT EXISTS
ambos cortocircuitos:tan pronto como un registro coincide con los criterios, se incluye o se filtra y el optimizador pasa al siguiente registro.
LEFT JOIN
se unirá a TODOS LOS REGISTROS independientemente de si coinciden o no, luego filtre todos los registros que no coincidan. Si sus tablas son grandes y/o tiene múltiples JOIN
criterios, esto puede requerir muchos recursos.
Normalmente trato de usar NOT EXISTS
y EXISTS
donde sea posible. Para SQL Server, IN
y NOT IN
son semánticamente equivalentes y pueden ser más fáciles de escribir. Estos son algunos de los únicos operadores que encontrará en SQL Server que garantizan un cortocircuito.