Outer join syntax is hard to remember. Make up some mnemonics to help. SQL> select * from emp; ID NAME DEPTID ---------- ---------- ---------- 1 John 1 SQL> select * from dept; ID NAME ---------- ---------- 1 Accounting 2 IT SQL> select * from emp a, dept b where a.deptid=b.id(+); ID NAME DEPTID ID NAME ---------- ---------- ---------- ---------- ---------- 1 John 1 1 Accounting SQL> select * from emp a, dept b where a.deptid(+)=b.id; <-- think of "(+)" as "plus something else", "plus more rows" ID NAME DEPTID ID NAME ---------- ---------- ---------- ---------- ---------- 1 John 1 1 Accounting <-- table A (emp) row 2 IT <-- plus rows from other tables (even if not matching) SQL> select * from emp a left outer join dept b on a.deptid=b.id; ID NAME DEPTID ID NAME ---------- ---------- ---------- ---------- ---------- 1 John 1 1 Accounting SQL> select * from emp a right outer join dept b on a.deptid=b.id; <-- same as "from a, b where a.deptid(+)=b.id" -- think of "right outer" as "plus something else" ID NAME DEPTID ID NAME ---------- ---------- ---------- ---------- ---------- 1 John 1 1 Accounting <-- table A (emp) row 2 IT <-- plus rows from other tables (even if not matching) SQL> select * from dept a left outer join emp b on a.id=b.deptid; <-- think of "left outer" as "show all rows" -- i.e. "show all rows (even if not matching)" ID NAME ID NAME DEPTID -- read "a left outer join b" as "A showing all rows ---------- ---------- ---------- ---------- ---------- -- "(even if not matching) join B" 1 Accounting 1 John 1 2 IT SQL> select * from dept a right outer join emp b on a.id=b.deptid; ID NAME ID NAME DEPTID ---------- ---------- ---------- ---------- ---------- 1 Accounting 1 John 1 SQL> select * from dept a left join emp b on a.id=b.deptid; <-- "outer" in "left outer" or "right outer" is optional -- but it's better to keep it for easy reading ID NAME ID NAME DEPTID ---------- ---------- ---------- ---------- ---------- 1 Accounting 1 John 1 2 IT