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.