Note: I am not asking you to tell me “use explicit joins” but looking for Oracle official position if any on that subject.
From Oracle database documentation (also appears in 9i and 11g documentations):
Oracle recommends that you use the
FROMclauseOUTER JOINsyntax
rather than the Oracle join operator. Outer join queries that use the
Oracle join operator(+)are subject to the following rules and
restrictions […]
In other words, Oracle advises to prefer the first of these two forms:
FROM a LEFT JOIN b ON b.x = a.x
vs
FROM a, b WHERE b.x(+) = a.x
However, I have never found in any Oracle documentation a single recommendation to use preferably one of those two forms:
FROM a INNER JOIN b ON b.x = a.x
vs
FROM a, b WHERE b.x = a.x
Is there a paragraph I missed?
I haven’t seen it if there is. The reason for preferring ANSI syntax for outer joins in particular (apart from the non-standarrd, Oracle-specific
(+)symbol) is that more outer joins are expressible using the ANSI syntax. The restriction “ORA-01417: a table may be outer joined to at most one other table” applies to(+)outer joins but not to ANSI outer joins. Other restrictions on(+)that do not apply to ANSI outer joins are documented here.One highly respected Oracle expert actually recommends sticking to the old syntax for inner joins – see Jonathan Lewis’s blog. He says there that ANSI joins are transformed to traditional Oracle joins under the covers anyway. I don’t agree with him 100% (I prefer ANSI joins myself in general), but would not claim to have a fraction of his knowledge on the topic.
In a nutshell, ANSI outer joins are technically superior to old
(+)joins, whereas with inner joins it is more just a matter of style.