- è come un SELECT DISTINCT, quindi elimina i doppioni
- fa un ORDER BY dei record
UNION ALL
- lascia i doppioni
- mantiene l'ordine originale dei record
Creo due tabelle con la stessa struttura e le riempio:
DECLARE @a as table (a int, b varchar(10)) INSERT @a (a, b) SELECT 20, 'bla' INSERT @a (a, b) SELECT 10, 'foo' DECLARE @b as table (a int, b varchar(10)) INSERT @b (a, b) SELECT 20, 'bla' SELECT * FROM @a SELECT * FROM @bRisultati:
a b ----------- ---------- 20 bla 10 foo a b ----------- ---------- 20 bla
UNION:
SELECT * FROM @a UNION SELECT * FROM @bRisultati:
a b ----------- ---------- 10 foo 20 bla
UNION ALL:
SELECT * FROM @a UNION ALL SELECT * FROM @bRisultati:
a b ----------- ---------- 20 bla 10 foo 20 bla
Dimostrazione che la UNION ALL è una DISTINCT:
SELECT DISTINCT * FROM ( SELECT * FROM @a UNION ALL SELECT * FROM @b ) as xRisultati:
a b ----------- ---------- 10 foo 20 bla
Trovato qui...
... e qui.