Claiming that NATURAL JOIN is equivalent to CROSS JOIN when there are
no common column names is only strictly correct if it's an inner join;
you can't say e.g. CROSS LEFT JOIN. Better to explain it as meaning
JOIN ON TRUE, instead. Per a suggestion from David Johnston.
Discussion: https://postgr.es/m/CAKFQuwb+mYszQhDS9f_dqRrk1=Pe-S6D=XMkAXcDf4ykKPmgKQ@mail.gmail.com
consisting of all column names that appear in both
input tables. As with <literal>USING</>, these columns appear
only once in the output table. If there are no common
- column names, <literal>NATURAL</literal> behaves like
- <literal>CROSS JOIN</literal>.
+ column names, <literal>NATURAL JOIN</literal> behaves like
+ <literal>JOIN ... ON TRUE</literal>, producing a cross-product join.
</para>
<note>
<varlistentry>
<term><literal>NATURAL</literal></term>
<listitem>
- <para><literal>NATURAL</literal> is shorthand for a
+ <para>
+ <literal>NATURAL</literal> is shorthand for a
<literal>USING</> list that mentions all columns in the two
- tables that have the same names.
+ tables that have matching names. If there are no common
+ column names, <literal>NATURAL</literal> is equivalent
+ to <literal>ON TRUE</>.
</para>
</listitem>
</varlistentry>