Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

JOINs filtern:WHERE vs. ON

Die Link @Gratzy bereitgestellt ist hilfreich

Die Unterscheidung zwischen Bedingungen in der ON-Klausel und der WHERE-Klausel ist sicherlich grau.

Für INNER JOINS sind sie äquivalent. Bei OUTER JOINS ist Ihr Verständnis richtig, dass die WHERE-Klausel konzeptionell angewendet wird, nachdem die ON-Bedingung ausgewertet wurde.

Aber in vielen Fällen liegt der Unterschied eher in der Absicht als in der Funktionalität. Es gibt oft einen semantischen Unterschied zwischen den ON-Bedingungen und der WHERE-Klausel.

Beispielsweise haben ältere Versionen von SQL Server die ON-Syntax wirklich implementiert, indem sie Bedingungen in der WHERE-Klausel verwendet haben, indem sie einen *= verwendet haben oder =* Syntax, um LEFT- oder RIGHT-Joins zu implizieren (was in einigen Fällen zu seltsam subtil unterschiedlichen Ergebnissen von den LEFT- und RIGHT-JOIN-Äquivalenten führte)

Im Allgemeinen lautet mein Rat, immer die entsprechenden Schlüsselfelder in der ON-Klausel zu verwenden, um Datensätze basierend auf der Logik zu verknüpfen, wie die Datensätze miteinander verknüpft sind. Verwenden Sie die WHERE-Klausel, um Filterbedingungen anzuwenden, die diese Ergebnismenge schrittweise einschränken.