länk @Gratzy tillhandahålls är till hjälp
Skillnaden mellan villkoren i ON-satsen och WHERE-satsen är verkligen grå.
För INNER JOINS är de likvärdiga. För OUTER JOINS är din uppfattning korrekt att WHERE-satsen tillämpas begreppsmässigt efter att ON-villkoret har utvärderats.
Men i många fall beror skillnaden mer på avsikt än funktionalitet. Det finns ofta en semantisk skillnad mellan ON-villkoren och WHERE-satsen.
Till exempel implementerade äldre versioner av SQL Server verkligen ON-syntaxen med villkor i WHERE-satsen, med en *=
eller =*
syntax för att antyda LEFT- eller RIGHT-kopplingar (vilket ledde till konstigt subtilt olika resultat från LEFT- och RIGHT JOIN-ekvivalenterna i vissa fall)
I allmänhet är mitt råd att alltid använda lämpliga nyckelfält i ON-klausulen för att sammanfoga poster baserat på logiken i hur posterna associerar med varandra. Använd WHERE-satsen för att tillämpa filtreringsvillkor som gradvis begränsar denna resultatuppsättning.