В mysql, как написал
Rsa97, варианты эквивалентны. В стандарте SQL (и многих других СУБД) это не так.
CROSS JOIN - используется без условия ON и действительно выполняет декартово произведение (так же работает запятая).
INNER JOIN требует ON.
Из-за того, что ON условие не обязательно сначала декартово произведение выполняется, а потом условие в ON отсеивает ненужное.
Стоит запомнить, что SQL - язык декларативный (а не императивный). SQL запрос определяет, что надо сделать, а не как. Поэтому хотя и можно представлять себе работу его так, как вы описали, но в реальности почти всегда соединение будет происходить иначе и более оптимально (почитайте про nested loops, merge join, hash join и т.д.).