Dostarczono link @Gratzy jest pomocne
Rozróżnienie między warunkami w klauzuli ON i klauzuli WHERE jest z pewnością szare.
Dla INNER JOINS są one równoważne. W przypadku OUTER JOINS rozumiesz, że klauzula WHERE jest koncepcyjnie stosowana po ocenie warunku WŁĄCZENIA.
Ale w wielu przypadkach różnica polega bardziej na intencji niż funkcjonalności. Często występuje różnica semantyczna między warunkami ON a klauzulą WHERE.
Na przykład starsze wersje SQL Server rzeczywiście implementowały składnię ON przy użyciu warunków w klauzuli WHERE, wykorzystując *=
lub =*
składnia sugerująca sprzężenia LEFT lub RIGHT (co prowadziło w niektórych przypadkach do dziwnie subtelnie różniących się wyników od odpowiedników LEFT i RIGHT JOIN)
Ogólnie radzę zawsze używać odpowiednich pól kluczowych w klauzuli ON, aby łączyć rekordy na podstawie logiki kojarzenia rekordów ze sobą. Użyj klauzuli WHERE, aby zastosować warunki filtrowania, które stopniowo ograniczają ten zestaw wyników.