select * from table1 fuller outer join table2
on ( matching_columns)
Nulls on either side represent a difference, eg
SQL> create table t1 as select empno, ename, sal from scott.emp;
Table created.
SQL> create table t2 as select empno, ename, sal from scott.emp;
Table created.
SQL>
SQL> delete from t1 where rownum = 1;
1 row deleted.
SQL> insert into t2 (empno,ename) values ( 1000,'Connor');
1 row created.
SQL>
SQL> select *
2 from t1 full outer join t2
3 on ( t1.empno = t2.empno );
EMPNO ENAME SAL EMPNO ENAME SAL
---------- ---------- ---------- ---------- ---------- ----------
7369 SMITH 800
7499 ALLEN 1600 7499 ALLEN 1600
7521 WARD 1250 7521 WARD 1250
7566 JONES 2975 7566 JONES 2975
7654 MARTIN 1250 7654 MARTIN 1250
7698 BLAKE 2850 7698 BLAKE 2850
7782 CLARK 2450 7782 CLARK 2450
7788 SCOTT 3000 7788 SCOTT 3000
7839 KING 5000 7839 KING 5000
7844 TURNER 1500 7844 TURNER 1500
7876 ADAMS 1100 7876 ADAMS 1100
7900 JAMES 950 7900 JAMES 950
7902 FORD 3000 7902 FORD 3000
7934 MILLER 1300 7934 MILLER 1300
1000 Connor
15 rows selected.
You can customise this however you like to compare rows. Also checkout the ORA_HASH function for comparing row sets