MySQL documentazione tratta questo argomento.
Ecco una sinossi. Quando usi join
o inner join
, il on
condizione è facoltativa. Questo è diverso dallo standard ANSI e diverso da quasi tutti gli altri database. L'effetto è un cross join
. Allo stesso modo, puoi usare un on
clausola con cross join
, che differisce anche dall'SQL standard.
Un cross join crea un prodotto cartesiano, ovvero ogni possibile combinazione di 1 riga dalla prima tabella e 1 riga dalla seconda. Il cross join per una tabella con tre righe ('a', 'b' e 'c') e una tabella con quattro righe (diciamo 1, 2, 3, 4) avrebbe 12 righe.
In pratica, se vuoi fare un cross join, usa cross join
:
from A cross join B
è molto meglio di:
from A, B
e:
from A join B -- with no on clause
Il on
la clausola è richiesta per un join esterno destro o sinistro, quindi la discussione non è rilevante per loro.
Se hai bisogno di capire i diversi tipi di join, allora devi studiare un po' sui database relazionali. Stackoverflow non è un luogo appropriato per quel livello di discussione.