poskytl odkaz @Gratzy je užitečné
Rozdíl mezi podmínkami v klauzuli ON a klauzuli WHERE je jistě šedý.
Pro INNER JOINS jsou ekvivalentní. Pokud jde o OUTER JOINS, rozumíte správně, že klauzule WHERE je koncepčně aplikována po vyhodnocení podmínky ON.
Ale v mnoha případech je rozdíl způsoben spíše záměrem než funkčností. Mezi podmínkami ON a klauzulí WHERE je často sémantický rozdíl.
Například starší verze SQL Serveru skutečně implementovaly syntaxi ON pomocí podmínek v klauzuli WHERE, využívající *=
nebo =*
syntaxe, která implikuje spojení LEFT nebo RIGHT (což v některých případech vedlo k podivně jemně odlišným výsledkům od ekvivalentů LEFT a RIGHT JOIN)
Obecně platí, že moje rada je vždy používat příslušná klíčová pole v klauzuli ON ke spojení záznamů na základě logiky toho, jak se záznamy navzájem spojují. Pomocí klauzule WHERE použijte podmínky filtrování, které postupně omezují tuto sadu výsledků.