SQLMentor // articles

Oracle (+) Outer Join Syntax Explained

Oracle's pre-ANSI (+) notation for outer joins still turns up in older code and on certification exams. Here's how to read it, its direct ANSI JOIN equivalent, and why you shouldn't write new code with it.

Oracle's original, pre-ANSI outer join syntax

Before the ANSI JOIN ... ON syntax became standard practice, Oracle used a proprietary notation: putting (+) next to a column in the WHERE clause to mark that side as "optional" — the side that gets NULL-extended when there's no match. It still appears in older Oracle code and occasionally on certification exams, even though ANSI join syntax is the modern, recommended standard.

The (+) syntax and its ANSI equivalent

Both queries return the same result — every employee, with department_name if one exists.

-- Old Oracle syntax: (+) marks departments as the "optional" side
SELECT e.first_name, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+);

-- ANSI equivalent (recommended)
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;

How to read the (+)

The rule of thumb: the table WITHOUT the (+) is the one that keeps all its rows — the (+) marks the side that's allowed to be missing.

PlacementMeaning
(+) on the right table's columnleft table is the "driving" side — equivalent to a LEFT JOIN
(+) on the left table's columnright table is the "driving" side — equivalent to a RIGHT JOIN

Restrictions that don't apply to ANSI syntax

The (+) syntax has real limitations ANSI joins don't share: you can't use it to express a full outer join (there's no way to mark both sides optional in the same condition — a separate UNION of two outer queries was the old workaround), it can't be combined with an OR across different columns in some cases, and mixing it with subqueries or complex conditions gets error-prone fast. This — plus plain readability — is why ANSI JOIN syntax has been the recommended standard in Oracle for a long time; new code should use it.

Frequently asked questions

Is the Oracle (+) syntax deprecated?
It still works and Oracle hasn't removed it, but ANSI JOIN syntax has been the recommended standard for a very long time — new code should use LEFT/RIGHT/FULL JOIN, not (+). Expect to encounter (+) mainly in legacy codebases and exam questions.
Can I use (+) for a full outer join?
Not directly — (+) can only mark one side of a single join condition as optional, so it can't express "both sides optional" the way FULL OUTER JOIN does. The old workaround combined two outer queries with UNION; the ANSI FULL JOIN keyword makes this unnecessary.
Why does Oracle give ORA-01417 or a similar error with (+)?
The (+) syntax has strict rules about where it can appear — it can't be combined with certain OR conditions, and a column can't have (+) applied in some contexts where it also appears elsewhere in the WHERE clause without it. These restrictions are a large part of why ANSI JOIN syntax is preferred: it doesn't have these edge cases.
Does 1Z0-071 still test the (+) syntax?
Certification blueprints can include legacy syntax recognition even as ANSI join syntax is the primary taught standard — check the current official syllabus, and see the 1Z0-071 exam guide for the full topic breakdown.