As far as I understand in a left outer join between two tables (say a & b) all the rows of the table on the left side of the join are retrieved regardless of the values in the rows on the right table.
That is correct in the sense that it says something about what left join on
returns, but it isn't a definition of what it returns. left join on
returns inner join on
rows plus (union all
) unmatched left table rows extended by nulls.
inner join on
returns the rows of cross join
that satisfy the on
condition--which could be any condition on the columns. cross join
returns every combination of a row from the left table & a row from the right table.
What do you expect outer join
without on
to mean? In standard SQL outer
& inner
join
have to have an on
. inner join
on
a true condition is the same as cross join
. Which has no unmatched left table rows. So if you want outer join
with no on
to mean outer join
on
a true condition then, since there are no unmatched rows in the inner join
on
that condition, the result is also just cross join
. (MySQL allows inner join
to be used without an on
, but it just means cross join
.)