Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Filtraggio delle JOIN:DOVE e ON

Il link fornito da @Gratzy è utile

La distinzione tra condizioni nella clausola ON e clausola WHERE è certamente grigia.

Per INNER JOINS sono equivalenti. Per OUTER JOINS, la tua comprensione è corretta sul fatto che la clausola WHERE viene applicata concettualmente dopo che la condizione ON è stata valutata.

Ma in molti casi la differenza è più dovuta all'intento che alla funzionalità. C'è spesso una differenza semantica tra le condizioni ON e la clausola WHERE.

Ad esempio, le versioni precedenti di SQL Server implementavano davvero la sintassi ON utilizzando le condizioni nella clausola WHERE, utilizzando un *= o =* sintassi per implicare join LEFT o RIGHT (che ha portato a risultati stranamente leggermente diversi dagli equivalenti LEFT e RIGHT JOIN in alcuni casi)

In generale, il mio consiglio è sempre di utilizzare i campi chiave appropriati nella clausola ON per unire i record in base alla logica di come i record si associano tra loro. Utilizza la clausola WHERE per applicare condizioni di filtro che restringono progressivamente questo set di risultati.