De vez en cuando debemos comparar dos tablas para probar si son identicas, e incluso encontrar las filas distintas que existen en una y no en la otra, por ejemplo:
1. Tenemos una copia o un respaldo de nuestra tabla y queremos probar si ha sido actualizada.
2. Ejecutamos el mismo sistema en dos entornos distintos y sospechamos que las diferencias entre sus rendimientos son el resultado de las diferencias entre las tablas de definiciones.
3. Debemos encontrar cuales son los objetos que existen en una base de datos y no en la otra, y por lo tanto comparamos las tablas de sistema con los detalles sobre los objetos de ambas bases de datos.
La tarea parece simple al principio, pero puede complicarse cuando las tablas tienen muchas columnas.
La mejor manera de llevar a cabo la tarea es restar una a la otra y viceversa con el operador Except (en Oracle utilizan el operador Minus) que nos devolvera todas las filas que estan en la primera y no en la segunda:
Select *
From MyTable_1
Except
Select *
From MyTable_2;
Suponiendo que las columnas y sus ordenes en ambas tablas son identicas- no debemos mencionar explicitamente sus nombres en las clausulas Select.
Ahora queremos obtener lo contrario- las filas que existen en la segunda tabla y no en la primera:
Select *
From MyTable_2
Except
Select *
From MyTable_1;
Para obtener todas las excepciones, combinaremos las dos recuperaciones previas en una, utilizando el operador Union All y añadiremos los nombres de las tablas asi que puedamos diferenciar los distintos recursos:
Select 'MyTable_1' Tbl,
*
From (Select *
From MyTable_1
Except
Select *
From MyTable_2) T1
Union All
Select 'MyTable_2' Tbl,
*
From (Select *
From MyTable_2
Except
Select *
From MyTable_1) T2;

En el diagrama Venn (teoría de conjuntos)- los partes en azul celeste representan las dos recuperaciones- la primera (a la izquierda) y la segunda (a la derecha), y si no devuelven filas se trata de dos conjuntos disjunos.