Vai al contenuto principale

UNION vs UNION ALL in SQL

Scopri le differenze di output e prestazioni tra UNION e UNION ALL: UNION rimuove i duplicati mentre UNION ALL li include.
Aggiornato 3 giu 2026  · 8 min leggi

Nel mondo SQL, la possibilità di combinare dati da più query è un requisito fondamentale, e SQL offre funzioni potenti come UNION e UNION ALL per farlo. 

Come vedrai, capire le sottili differenze tra le funzioni UNION e UNION ALL in SQL è essenziale per interrogare e gestire i dati in modo efficiente. Questo tutorial spiega le principali somiglianze, differenze e casi d’uso utilizzando dataset di esempio per aiutarti a ottimizzare le tue query SQL.

La risposta breve: SQL UNION vs UNION ALL 

La differenza chiave è che UNION rimuove i record duplicati, mentre UNION ALL include tutti i duplicati. Questa distinzione non solo cambia il numero di righe nel risultato della query, ma influisce anche sulle prestazioni.

Caratteristica UNION UNION ALL
Duplicati Rimuove i record duplicati Mantiene tutti i record (inclusi i duplicati)
Prestazioni Più lento (deve ordinare/effettuare hash dei dati per trovare i duplicati) Più veloce (si limita ad aggiungere i dati al risultato)
Operazione Teoria degli insiemi (unione matematica) Accodamento/stacking dei risultati

Consideriamo due tabelle di esempio, employees_2023 e employees_2024, che rappresentano i record dei dipendenti per due anni diversi.

SELECT *
FROM employees_2023

employee_id

name

department

1

Alice

HR

2

Bob

IT

3

Charlie

Finance

SELECT *
FROM employees_2024

employee_id

name

department

2

Bob

IT

3

Charlie

Finance

4

David

Marketing

Ora uniamo le due tabelle usando la funzione UNION.

SELECT employee_id, name, department FROM employees_2023 
UNION 
SELECT employee_id, name, department FROM employees_2024;

employee_id

name

department

1

Alice

HR

2

Bob

IT

3

Charlie

Finance

4

David

Marketing

In questo risultato, i record duplicati vengono rimossi. Ora confrontiamolo con il risultato che otteniamo usando UNION ALL.

SELECT employee_id, name, department FROM employees_2023 
UNION ALL 
SELECT employee_id, name, department FROM employees_2024;

employee_id

name

department

1

Alive

HR

2

Bob

IT

3

Charlie

Finance

2

Bob

IT

3

Charlie

Finance

4

David

Marketing

In questo risultato, sono inclusi tutti i record e i duplicati non vengono rimossi.

Che cos’è UNION in SQL?

La funzione UNION combina i risultati di due o più query SELECT in un unico set di risultati, rimuovendo le righe duplicate. Ogni istruzione SELECT all’interno di UNION deve avere lo stesso numero di colonne. Inoltre, devono avere tipi di dati simili e le colonne devono essere nello stesso ordine. Per capire la funzione, creiamo due tabelle di esempio qui sotto.

CREATE TABLE sales_team (
    employee_id INT,
    employee_name VARCHAR(50)
);
INSERT INTO sales_team (employee_id, employee_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
CREATE TABLE support_team ( 
employee_id INT, 
employee_name VARCHAR(50)
 );
INSERT INTO support_team (employee_id, employee_name) VALUES 
(3, 'Charlie'), 
(4, 'David'), 
(5, 'Eve');

Il codice sopra creerà le due tabelle che useremo in questo tutorial, rispettivamente sales_team e support_team. Puoi visualizzare le tabelle usando il codice seguente.

SELECT * 
FROM sales_team

Records in the <code624

Record nella tabella sales_team. Immagine dell’autore 

SELECT * 
FROM support_team

Records in the <code624

Record nella tabella support_team. Immagine dell’autore 

Sono tabelle piccole con tre record ciascuna, e i nomi delle colonne sono autoesplicativi. Ora che abbiamo creato le due tabelle, applichiamo la funzione UNION.

SELECT employee_id, employee_name
    FROM sales_team
   UNION
SELECT employee_id, employee_name
    FROM support_team;

Output from the <code624

Output della funzione UNION. Immagine dell’autore 

Si vede che la voce duplicata di employee_id, con valore 3, viene rimossa. 

Quali sono i casi d’uso di UNION in SQL?

Ecco alcuni casi d’uso comuni della funzione UNION.

  • Combinare risultati da tabelle diverse: Quando vuoi unire dati da più tabelle assicurandoti di non avere record duplicati, UNION è la funzione di riferimento.

  • Gestire fonti dati diverse: UNION è utile quando combini tabelle provenienti da fonti differenti. 

  • Rimuovere duplicati tra query: Quando vuoi garantire l’unicità del set di risultati combinato, usa UNION.

Che cos’è UNION ALL in SQL?

La funzione UNION ALL combina i risultati di due o più query SELECT, includendo tutte le righe duplicate. Questa funzione è più veloce di UNION perché non si preoccupa di rimuovere i duplicati.

SELECT employee_id, employee_name
    FROM sales_team
UNION ALL
SELECT employee_id, employee_name
    FROM support_team;

Output from the <code624

Output della funzione UNION ALL. Immagine dell’autore 

In questo caso, le voci duplicate vengono ripetute e non rimosse.

Quali sono i casi d’uso di UNION ALL in SQL?

Ecco alcuni casi d’uso comuni della funzione UNION ALL.

  • Combinare risultati con duplicati: Usa UNION ALL quando devi unire risultati da più query e mantenere tutte le righe duplicate.
  • Considerazioni sulle prestazioni: UNION ALL è più efficiente in termini di tempo rispetto a UNION, perché non richiede il passaggio aggiuntivo di rimozione dei duplicati.
  • Aggregare dati di periodi diversi: Quando aggreghi dati di periodi o fonti differenti e devi preservare le voci duplicate, è preferibile UNION ALL.
  • Reportistica e analisi: Per report in cui è necessario ogni record, inclusi i duplicati, UNION ALL è adatto.

UNION e UNION ALL: somiglianze e differenze

Creiamo una tabella di riepilogo delle somiglianze e differenze. 

Caratteristica

UNION

UNION ALL

Righe duplicate

Rimosse

Incluse

Prestazioni

Più lento

Più veloce

Caso d’uso

Quando ti servono record univoci

Quando ti servono tutti i record

Dimensione del risultato

Più piccola

Più grande

Differenze di sintassi tra UNION e UNION ALL nei diversi dialetti SQL 

Sebbene la sintassi di base rimanga la stessa nei vari dialetti SQL, ci sono leggere variazioni a seconda della piattaforma. Osservando il codice, nella maggior parte delle piattaforme, come SQL Server, Oracle, MySQL, PostgreSQL o BigQuery, il codice sarà simile a quanto mostrato di seguito. 

SELECT employee_id, employee_name
    FROM sales_team
UNION ALL
SELECT employee_id, employee_name
    FROM support_team;

I comandi di base in questi dialetti SQL restano gli stessi, con alcune sfumature e differenze:

  1. Gestione di NULL e collations: I diversi dialetti SQL possono avere regole differenti per la gestione dei valori NULL e della collation delle stringhe.
  2. Ottimizzazioni delle prestazioni: Le ottimizzazioni e l’efficienza di esecuzione possono variare.
  3. Gestione degli errori e avvisi: I diversi dialetti possono gestire errori e avvisi in modo diverso quando si usano queste funzioni.
  4. Funzioni e caratteristiche specifiche della piattaforma: Alcuni dialetti SQL possono offrire funzioni o caratteristiche aggiuntive da usare insieme a UNION e UNION ALL per scenari più complessi.

Il comando è significativamente diverso nel caso di PySpark, che opera in un ambiente distribuito. Il codice è riportato di seguito, assumendo che df1 e df2 siano i nomi dei due DataFrame contenenti le due tabelle create sopra:

df1.union(df2)

3 regole ed errori comuni quando si usa SQL UNION

Sebbene UNION e UNION ALL siano potenti, sono rigide in termini di sintassi. Se la tua query restituisce un errore, probabilmente sta violando una di queste tre regole d’oro.

1. Conteggio delle colonne non corrispondente

L’errore più comune è una mancata corrispondenza nel numero di colonne. Per combinare due dataset, la “forma” delle tabelle deve essere identica. Non puoi impilare una tabella con 3 colonne sopra una tabella con 2 colonne.

L’errore:

-- This will fail because the column counts do not match
SELECT employee_id, name, department 
FROM employees_2023
UNION
SELECT employee_id, name 
FROM employees_2024;

La soluzione: Assicurati che entrambe le istruzioni SELECT richiedano esattamente lo stesso numero di colonne. Se nella seconda tabella manca un dato (come department), puoi selezionare NULL come segnaposto per far combaciare i conteggi:

SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, NULL as department FROM employees_2024;

2. Compatibilità dei tipi di dato

SQL combina i risultati in base alla posizione, non al nome della colonna. Il tipo di dato della prima colonna nella prima query deve corrispondere (o essere compatibile) con il tipo di dato della prima colonna nella seconda query.

L’errore: Se inverti accidentalmente l’ordine delle colonne, SQL prova a impilare un numero (ID) sopra una stringa (Nome), causando un errore di conversione del tipo di dato.

-- This fails because Column 1 (ID - INT) cannot combine with Column 1 (Name - VARCHAR)
SELECT employee_id, name FROM employees_2023
UNION
SELECT name, employee_id FROM employees_2024;

La soluzione: Verifica sempre che le colonne siano elencate nello stesso identico ordine in ogni istruzione SELECT all’interno della UNION.

3. Limitazioni di ORDER BY

Un punto di confusione frequente è dove posizionare la clausola ORDER BY. Non puoi ordinare le singole sottoquery all’interno di un’operazione di UNION; puoi ordinare solo il risultato finale combinato.

L’errore: Usare ORDER BY prima della query finale genererà un errore di sintassi.

-- INCORRECT SYNTAX
SELECT employee_id, name FROM employees_2023 
ORDER BY employee_id -- You cannot sort here!
UNION
SELECT employee_id, name FROM employees_2024;

La soluzione: Inserisci la clausola ORDER BY alla fine della query. In questo modo l’ordinamento si applica all’intero set di risultati combinato.

-- CORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
UNION
SELECT employee_id, name FROM employees_2024
ORDER BY employee_id; -- Sorts the final result

Considerazioni finali

È fondamentale comprendere quando applicare UNION rispetto a UNION ALL per gestire i dati in modo efficiente con SQL. Mentre UNION seleziona solo i record distinti, UNION ALL li seleziona tutti, influenzando prestazioni e dimensione del set di risultati. Usa queste conoscenze per scegliere la funzione più adatta alle tue esigenze specifiche. 

Per approfondire, valuta le seguenti risorse:

  • Introduzione a SQL: Impara a creare e interrogare database relazionali usando SQL.
  • Fondamenti di SQL: Acquisisci le competenze SQL di base per interagire con i tuoi dati e interrogarli. 
  • Certificazione SQL Associate: Dimostra le tue capacità SQL estraendo i dati appropriati da un database e usandoli per rispondere a domande comuni sui dati.
  • SQL intermedio: Con questo corso pratico imparerai tutto ciò che ti serve per analizzare i dati usando il tuo codice SQL, già da oggi.

Vikash Singh's photo
Author
Vikash Singh
LinkedIn

Professionista esperto in data science, intelligenza artificiale, analytics e strategia dei dati.

Domande frequenti

Qual è la differenza principale tra SQL UNION e UNION ALL?

UNION rimuove i record duplicati, mentre UNION ALL include tutti i duplicati.

C’è una differenza di prestazioni tra UNION e UNION ALL?

Sì, in genere UNION è più lento perché rimuove i duplicati.

Ci sono casi d’uso specifici in cui UNION ALL è preferibile a UNION?

UNION ALL è preferibile quando ti servono tutti i record, inclusi i duplicati, ad esempio per reportistica e analisi.

Quando dovrei usare SQL UNION invece di UNION ALL?

Usa UNION quando ti serve un set di risultati combinato senza duplicati.

In che modo i diversi dialetti SQL influiscono sull’uso di UNION e UNION ALL?

Anche se la sintassi di base è coerente, potrebbero esserci leggere variazioni nelle prestazioni, nella gestione dei NULL e nella collation tra i diversi dialetti SQL.

Argomenti

Impara SQL con DataCamp

Corso

Manipolazione dei dati in SQL

4 h
323.5K
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra altroMostra altro