ANSI 標準でonは、 を除くすべての結合タイプに必須ですcross join。これは、Oracle および他のほとんどのデータベースに適用されます。
MySQL は少し異なります。これは、MySQLドキュメントの構文図です。
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference STRAIGHT_JOIN table_factor
| table_reference STRAIGHT_JOIN table_factor ON conditional_expr
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
つまり、MySQL では、onを に対してオプションにすることはできますが、またはをオプションにすることはできjoinません。MySQL はサポートしていません。そして、それをより混乱させるのは、句を受け入れるようなものです。left outer joinright outer joinfull outer joincross joinjoinon
また、MySQL 拡張機能は無視してください。 左結合、右結合、および内部結合には 必ず節を使用してください。for 句は使用しないでください。結合に使用されている列で明示的にすることを好むため、これらを使用することを好みます (これについては質問しません)。ononcross joinnatural join
編集:
SQL Fiddleによると、バージョン 5.6 では動作full outer join時にエラーが発生しleft outer joinます。したがって、これはエラーを生成します:
select *
from (select 1 as a) t1 full outer join
(select 2 as b) t2
on t1.a = t2.b;
これもエラーを生成します。
select *
from (select 1 as a) t1 full join
(select 2 as b) t2;
また、MySQL のドキュメント (5.7 まで) はすべて、full joinサポートされていないことを非常に明確に示しています。クエリが機能した理由がわかりません。