Sample SQL statements to compare data in two tables with identical structure.
(Statements work for MS SQL Server, as well as for many other databases.)
To find records which exist in source table but not in target table:
SELECT * FROM t1
WHERE NOT EXISTS (SELECT * FROM t2 WHERE t2.Id = t1.Id)
SELECT * FROM t1 LEFT OUTER JOIN T2 on t1.Id = t2.Id
WHERE t2.Id IS NULL
If the primary key consists of more than one column, you can modify SQL statement:
SELECT Id, Col1 FROM t1 WHERE NOT EXISTS
(SELECT 1 FROM t2 WHERE t1.Id = t2.Id AND Col1.t1 = Col2.t2)
On SQL Server 2005 or newer you can use the EXCEPT operator:
SELECT Id, Col1 FROM t1 EXCEPT SELECT Id, Col1 FROM t2
To find records which exist in source table but not in target table, as well as records which exists in target table but not in source table:
SELECT * FROM (SELECT Id, Col1 FROM t1, 'old'
SELECT Id, Col1 FROM t2, 'new') t
ORDER BY Id
Note: For tables with large amounts of data UNION statement might be very slow.
You can use SQL Server Comparison Tool to simplify and automate your comparison processes.