Dato queste due domande:è meglio mettere più logica nella tua clausola ON o dovrebbe avere solo il minimo necessario?
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'
c'è una differenza dimostrabile tra i due? Mi sembra che la clausola "t2.aField <> 'C'" verrà eseguita su ogni riga in t2 che soddisfi i criteri di join. Sono errato?
Aggiornamento: Ho eseguito un "Include Actual Execution Plan" in SQL Server. Le due domande erano identiche.
Sono d'accordo, se fa parte di un indice dovrebbe essere nella clausola ON e se si tratta di criteri di filtro dovrebbe andare nella clausola WHERE. Questo ha abbastanza upvotes per chiamarlo la risposta. – jcollum