Musisz sprawdzić plany wykonania. Spodziewam się jednak, że plany wykonania są różne – a przynajmniej powinny być w niektórych okolicznościach.
Pierwsze zapytanie:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2
może łatwo korzystać z indeksów w table1(a, b, c) i table2(a, b, c) przed robienie ostatniego UNION . Powinno to przyspieszyć ostateczną unię poprzez zmniejszenie rozmiaru danych. Drugie zapytanie nie ma tej przewagi.
W rzeczywistości najbardziej wydajnym sposobem napisania tego zapytania byłoby prawdopodobnie posiadanie dwóch indeksów i użycie:
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)
To jest prawie identyczne, chociaż może obsługiwać NULL wartości w drugiej tabeli nieco inaczej.