Você precisa verificar os planos de execução. No entanto, eu esperaria que os planos de execução fossem diferentes - ou pelo menos deveriam ser em algumas circunstâncias.
A primeira consulta:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
pode aproveitar prontamente os índices em
table1(a, b, c)
e table2(a, b, c)
antes fazendo o UNION
final . Isso deve acelerar a união final, reduzindo o tamanho dos dados. A segunda consulta não tem essa vantagem. Na verdade, a maneira mais eficiente de escrever essa consulta provavelmente seria ter os dois índices e usar:
SELECT DISTINCT a, b, c FROM table1 t1
UNION ALL
SELECT DISTINCT a, b, c
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.a = t1.a and t2.b = t1.b and t2.c = t1.c)
Isso é quase idêntico, embora possa lidar com
NULL
valores na segunda tabela um pouco diferente.