El enlace proporcionado por @Gratzy es útil
La distinción entre las condiciones en la cláusula ON y la cláusula WHERE es ciertamente gris.
Para INNER JOINS son equivalentes. Para OUTER JOINS, su comprensión es correcta de que la cláusula WHERE se aplica conceptualmente después de que se haya evaluado la condición ON.
Pero en muchos casos, la diferencia se debe más a la intención que a la funcionalidad. A menudo hay una diferencia semántica entre las condiciones ON y la cláusula WHERE.
Por ejemplo, las versiones anteriores de SQL Server realmente implementaron la sintaxis ON usando condiciones en la cláusula WHERE, empleando un *=
o =*
sintaxis para implicar combinaciones IZQUIERDA o DERECHA (lo que condujo a resultados extrañamente sutilmente diferentes de los equivalentes de UNIÓN IZQUIERDA y DERECHA en algunos casos)
En general, mi consejo es siempre usar los campos clave apropiados en la cláusula ON para unir registros según la lógica de cómo los registros se asocian entre sí. Utilice la cláusula WHERE para aplicar condiciones de filtrado que restringen progresivamente este conjunto de resultados.