INTERSECT не является внутренним соединением. Они разные. ВНУТРЕННЕЕ СОЕДИНЕНИЕ даст вам дубликаты строк в тех случаях, когда INTERSECT НЕ БУДЕТ. Вы можете получить эквивалентные результаты по:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
on a.PK = b.PK
Обратите внимание, что PK должен быть столбцом или столбцами первичного ключа. Если на столе нет PK (ПЛОХО!), Вы должны написать это так:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
ON a.Col1 = b.Col1
AND a.Col2 = b.Col2
AND a.Col3 = b.Col3 ...
С MINUS вы можете сделать то же самое, но с LEFT JOIN и проверкой условия WHERE на null в одном из необнуляемых столбцов таблицы b (предпочтительно первичный ключ).
SELECT DISTINCT a.*
FROM a
LEFT JOIN b
on a.PK = b.PK
WHERE b.PK IS NULL
Это должно сделать это.