link @Gratzy leveret er nyttigt
Forskellen mellem betingelser i ON-sætningen og WHERE-sætningen er bestemt en grå.
For INNER JOINS er de tilsvarende. For OUTER JOINS er din forståelse korrekt, at WHERE-sætningen er begrebsmæssigt anvendt, efter at ON-betingelsen er blevet evalueret.
Men i mange tilfælde skyldes forskellen mere hensigten end funktionalitet. Der er ofte en semantisk forskel mellem ON-betingelserne og WHERE-sætningen.
For eksempel implementerede ældre versioner af SQL Server virkelig ON-syntaksen ved at bruge betingelserne i WHERE-sætningen ved at bruge en *=
eller =*
syntaks til at antyde LEFT eller RIGHT joinforbindelser (hvilket førte til underligt subtilt forskellige resultater fra LEFT og RIGHT JOIN ækvivalenterne i nogle tilfælde)
Generelt er mit råd altid at bruge de relevante nøglefelter i ON-klausulen til at forbinde poster baseret på logikken i, hvordan posterne associerer med hinanden. Brug WHERE-sætningen til at anvende filtreringsbetingelser, der gradvist begrænser dette resultatsæt.