Вот трюк, который я использую:
SELECT MAX(TABLE_NAME) AS TABLE_NAME
,[id]
,[name]
FROM (
SELECT 'T1' AS TABLE_NAME
,[id]
,[name]
FROM T1
UNION ALL
SELECT 'T2' AS TABLE_NAME
,[id]
,[name]
FROM T2
) AS X
GROUP BY [id]
,[name]
HAVING COUNT(*) = 1
ORDER BY [id]
,[name]
На самом деле у меня есть универсальный процесс, который я использую, который берет две таблицы и набор параметров и сравнивает таблицы, генерирующие динамический SQL (приведенный выше SQL фактически очищен от его сгенерированного кода), он использует либо UNION ALL
трюк или комбинация трех объединений в ответе OMG Ponies в зависимости от того, указаны ли ключевые столбцы / игнорируемые столбцы / общие столбцы.