Dadas estas dos consultas:¿es mejor poner más lógica en su cláusula ON o solo debe tener el mínimo necesario?
Select t1.id, t2.companyName
from table1 t1
INNER JOIN table2 t2 on t2.id = t1.fkId
WHERE t2.aField <> 'C'
O:
Select t1.id, t2.companyName
from table1 t1
INNER JOIN table2 t2 on t2.id = t1.fkId and t2.aField <> 'C'
¿Hay una diferencia demostrable entre los dos? Me parece que la cláusula "t2.aField <> 'C'" se ejecutará en cada fila en t2 que cumpla con los criterios de unión independientemente. ¿Soy incorrecto?
Actualización: Realicé un "Incluir plan de ejecución real" en SQL Server. Las dos consultas fueron idénticas.
Acepto, si es parte de un índice, debe estar en la cláusula ON y si se trata de criterios de filtrado debe ir en la cláusula WHERE. Esto tiene suficientes votos ascendentes para llamarlo la respuesta. – jcollum