Vai al contenuto principale

SQL UPDATE con JOIN: come funziona

Scopri come UPDATE con JOIN in SQL semplifica gli aggiornamenti tra tabelle in SQL Server. Capisci come INNER JOIN e LEFT JOIN differiscono per casi d’uso specifici ed esplora le alternative con sottoquery o l’istruzione MERGE.
Aggiornato 3 giu 2026  · 9 min leggi

Dati coerenti sono fondamentali per l’affidabilità e l’integrità nei database relazionali. Quando modifichi dati esistenti tra tabelle correlate, usiamo l’istruzione UPDATE con la clausola JOIN per ottenere coerenza dei dati. L’operazione UPDATE con JOIN è supportata in SQL Server ed è utile per garantire una sincronizzazione accurata dei dati tra le tabelle.

L’operazione JOIN in SQL consente aggiornamenti più complessi oltre le operazioni su singola tabella tramite chiavi esterne condivise tra tabelle diverse. L’UPDATE con JOIN è utile per sviluppatori e amministratori di database perché migliora l’efficienza e riduce il rischio di inconsistenze nei dati. 

Prima di iniziare, ti consiglio il corso di DataCamp Introduction to SQL Server per familiarizzare con il funzionamento dei database SQL Server. Questo tutorial è scritto specificamente pensando a SQL Server. Dai anche un’occhiata al nostro tutorial, Introduction to SQL Joins, per imparare a usare i JOIN quando lavori con più tabelle in SQL.

Come usare SQL UPDATE con JOIN

In SQL Server, l’operazione UPDATE con JOIN ti permette di aggiornare i record in una tabella in base ai dati corrispondenti presenti in un’altra. Questa tecnica è particolarmente utile quando sincronizzi dati tra più tabelle.

Usare SQL UPDATE con INNER JOIN

L’INNER JOIN in SQL recupera le righe/record con dati corrispondenti in entrambe le tabelle. Usato con l’istruzione UPDATE, un INNER JOIN garantisce che vengano aggiornati solo i record nella tabella di destinazione che hanno corrispondenze nella tabella unita.

La struttura tipica di UPDATE con INNER JOIN prevede di specificare la tabella di destinazione da aggiornare e definire le colonne da modificare. La struttura include anche l’uso di INNER JOIN per collegarla a un’altra tabella in base a una colonna comune, in modo da aggiornare solo i record necessari.

Esempio di INNER JOIN

Supponi di gestire un database retail in cui devi aggiornare la tabella Sales per sincronizzarla con le modifiche nella tabella Customer. Un cliente ha recentemente cambiato il metodo di contatto preferito e vuoi che queste modifiche si riflettano in entrambe le tabelle. Userai UPDATE con INNER JOIN per assicurarti che vengano modificati solo i record di vendita relativi ai clienti che hanno aggiornato le informazioni di contatto, senza influenzare le altre righe nei dati.

-- Update the Sales table based on the new preferred contact methods in the Customers table
UPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNER JOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN (3, 7, 9);

Best practice per UPDATE con INNER JOIN

Quando usi UPDATE con INNER JOIN, considera le seguenti best practice per query efficienti.

  • Usa indici sulle colonne di join: assicurati che le colonne usate nella condizione di JOIN siano indicizzate per ottimizzare le prestazioni e velocizzare l’esecuzione della query.

  • Limita l’ambito dell’update: usa la clausola WHERE per assicurarti che vengano aggiornate solo le righe rilevanti e per migliorare le prestazioni della query.

Usare SQL UPDATE con LEFT JOIN

Un LEFT JOIN viene usato per recuperare tutti i record dalla tabella di sinistra (prima) e i record corrispondenti dalla tabella di destra (seconda). Una query con LEFT JOIN restituirà risultati NULL dalla tabella di destra se non ci sono corrispondenze. Usato con l’istruzione UPDATE, il LEFT JOIN può aggiornare i record anche quando non ci sono dati corrispondenti nella seconda tabella, utile per colmare dati mancanti. Dai un’occhiata al nostro SQL Joins Cheat Sheet se vuoi ripassare i join in SQL.

Esempio di LEFT JOIN

Considera lo scenario in cui gestisci un database per un negozio online. La tabella Customers contiene l’elenco di tutti i clienti, mentre la tabella Orders contiene i dettagli degli ordini effettuati da alcuni di questi clienti. Userai il LEFT JOIN per recuperare e aggiornare i dettagli degli ordini per tutti i clienti, compresi quelli che non hanno ancora effettuato ordini. Questo metodo riempirà i dati mancanti per i clienti senza ordini con un valore NULL o con un valore specificato.

Il nostro esempio con LEFT JOIN sarà un po’ diverso perché LEFT JOIN restituisce valori NULL se non vengono trovati record corrispondenti nella tabella di destra. Per questo è importante capire come gestire questi valori NULLPuoi gestire i valori NULL impostando un valore predefinito nelle colonne da aggiornare. Usando la funzione COALESCE(), il LEFT JOIN includerà una condizione per un valore di default per i dati mancanti. La query seguente mostra come impostare un valore di default per i valori NULL.

-- Update all customers to set default values where OrderStatus and OrderDate are NULL
UPDATE c
SET 
    c.OrderStatus = COALESCE(o.OrderStatus, 'No Orders'),
    c.OrderDate = COALESCE(o.OrderDate, '2023-01-01')   
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- Select from the updated Customers table
SELECT * 
FROM Customers;

Puoi anche usare le funzioni COALESCE() o IFNULL() per gestire i valori NULL che coinvolgono calcoli prima di aggiornare le colonne. Dai un’occhiata al nostro tutorial COALESCE() SQL Function per saperne di più.

Best practice per UPDATE con LEFT JOIN

Quando usi UPDATE con LEFT JOIN, considera le seguenti best practice per query efficienti.

  • Usa riferimenti espliciti alle colonne: invece di usare SELECT *, specifica esplicitamente le colonne che vuoi aggiornare per rendere la query più chiara ed evitare aggiornamenti indesiderati.

  • Usa indici sulle colonne di join: assicurati che le colonne usate nella condizione di JOIN siano indicizzate per migliorare le prestazioni del JOIN e il tempo complessivo di esecuzione della query.

Considerazioni sulle prestazioni di SQL UPDATE con JOIN

Capire le implicazioni sulle prestazioni quando si usa UPDATE con JOIN in SQL è importante per assicurare che le query vengano eseguite in modo efficiente. Le prestazioni di queste operazioni possono essere influenzate da diversi fattori, tra cui la dimensione delle tabelle, il tipo di join utilizzato e la presenza di indici appropriati.

Indici e velocità delle query

Indicizzare le colonne coinvolte nella condizione di join è importante per velocizzare il processo di aggiornamento. Quando indicizzi correttamente le colonne, l’operazione individua solo le righe corrispondenti durante il join, riducendo il tempo necessario per la scansione della tabella.

Impatto di dataset di grandi dimensioni

Quando lavori con dataset di grandi dimensioni, l’esecuzione delle query può essere più lenta a causa di operazioni ad alta intensità di risorse. Considera le seguenti best practice per mitigare i problemi di prestazioni con dataset grandi. Prova anche lo skill track SQL Server for Database Administrators se progetterai o manterrai database regolarmente come parte del tuo lavoro. 

  • Aggiornamenti a batch: suddividi gli aggiornamenti in batch più piccoli per ridurre il carico sul database e aggiornare i record in modo efficiente.

  • Limita l’ambito dell’update: quando usi la clausola WHERE, specifichi le righe da aggiornare, riducendo il tempo di elaborazione delle query.

Errori comuni e come evitarli

Ci sono alcuni errori comuni che potresti incontrare quando usi UPDATE con JOIN in SQL Server. Questi errori possono portare a problemi di prestazioni o ad aggiornare dati non intenzionali. Di seguito alcuni di questi errori e come evitarli.

Aggiornamenti non intenzionali

Se non specifichi correttamente la condizione di join, l’UPDATE con JOIN aggiornerà più record del previsto. Questo errore può aggiornare un’intera tabella invece del sottoinsieme richiesto. Per evitarlo, assicurati sempre di usare una condizione di JOIN precisa per aggiornare le righe necessarie.

Prodotti cartesiani

Un prodotto cartesiano si verifica quando la condizione di join è errata o mancante, causando l’abbinamento di ogni riga della tabella di sinistra con ogni riga della tabella di destra. Questo problema può rallentare l’operazione della query e produrre risultati inaccurati. Per evitarlo, assicurati sempre di definire correttamente la condizione di JOIN. Inoltre, indica le colonne corrette su cui applicare la condizione di join.

Alternative a SQL UPDATE con JOIN

Sebbene l’UPDATE con JOIN sia un metodo potente per aggiornare record tra tabelle correlate, esistono metodi alternativi per ottenere lo stesso risultato. Ecco alcune opzioni.

Sottoquery

Le sottoquery sono un’alternativa importante al JOIN quando vuoi eseguire aggiornamenti basati su una condizione semplice. Con le sottoquery eviti tabelle multiple complesse specificando la condizione nella sottoquery.

L’esempio seguente mostra come usare una sottoquery per aggiornare la tabella Sales con il CustomerStatus più recente dalla tabella Customers.

-- Update the CustomerStatus in the Sales table
UPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers table
SET CustomerStatus = (
    -- Fetch CustomerStatus from the Customers table for the matching CustomerID
    SELECT CustomerStatus 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
)
-- Update rows in Sales where a matching CustomerID exists in the Customers table
WHERE EXISTS (
    -- Subquery to check if a matching CustomerID exists in the Customers table
    SELECT 1 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
);

Istruzione MERGE

L’istruzione MERGE è un comando SQL versatile che consente di eseguire operazioni di UPDATE, INSERT o DELETE in un’unica query confrontando due tabelle. L’istruzione MERGE è utile quando devi sincronizzare dati tra due tabelle, gestendo righe corrispondenti e non corrispondenti.

Usare l’istruzione MERGE è utile perché offre un metodo conciso per eseguire più operazioni in un’unica query. La sintassi dell’istruzione MERGE è la seguente.

-- Merge data from the source table into the target table
MERGE INTO target_table AS target
USING source_table AS source
    -- Define the common key between the source and target tables
    ON target.common_column = source.common_column
-- When a match is found in both tables based on the common key
WHEN MATCHED THEN
    -- Update the target table's column with the corresponding value from the source table
    UPDATE SET target.column = source.column
-- When a row exists in the source table but not in the target table
WHEN NOT MATCHED THEN
    -- Insert the new data into the target table
    INSERT (column1, column2) 
    VALUES (source.column1, source.column2)
-- When a row exists in the target table but not in the source table
WHEN NOT MATCHED BY SOURCE THEN
    -- Delete the row from the target table
    DELETE;

Conclusione

Capire come usare UPDATE con JOIN in SQL Server è importante per aggiornamenti di dati tra tabelle efficienti nei database relazionali. Questa tecnica ti permette di aggiornare i record in una tabella in base ai dati corrispondenti in un’altra, garantendo coerenza e sincronizzazione dei dati tra tabelle correlate. Applicare queste tecniche e best practice può migliorare le operazioni sui database, assicurando una gestione dei dati accurata, efficiente e affidabile. 

Se vuoi far progredire le tue competenze SQL, ti consiglio lo skill track di DataCamp SQL Server Fundamentals per migliorare le tue capacità di analisi dei dati. Il corso Writing Functions and Stored Procedures in SQL Server ti aiuterà anche a imparare una manipolazione efficiente dei dati in SQL Server. Se ti stai preparando per un colloquio SQL, ti consiglio di leggere il nostro post sul blog, 20 Top SQL Joins Interview Questions, per aiutarti a prepararti. Infine, se vuoi applicare le tue competenze SQL in una carriera come data engineer, considera anche il nostro career track Data Engineer in Python, completo di certificazione finale.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.

Domande frequenti su SQL

Qual è lo scopo di usare UPDATE con JOIN in SQL?

UPDATE con JOIN ti permette di aggiornare i record in una tabella in base ai dati corrispondenti presenti in un’altra tabella.

In che cosa differisce un INNER JOIN da un LEFT JOIN quando si usa in un’istruzione UPDATE?

Un INNER JOIN aggiorna solo i record che hanno righe corrispondenti in entrambe le tabelle, mentre un LEFT JOIN aggiorna tutti i record nella tabella di destinazione, inclusi quelli che non hanno una riga corrispondente nella tabella unita, colmando i dati mancanti o gestendo i valori NULL.

Quali sono i problemi di prestazioni di UPDATE con JOIN in SQL?

Tabelle/dataset di grandi dimensioni possono influenzare le prestazioni della query di UPDATE con JOIN poiché richiedono maggiore potenza di elaborazione.

Quali database supportano UPDATE con JOIN in SQL?

Il concetto di UPDATE con JOIN funziona in SQL Server, MySQL e PostgreSQL, anche se la sintassi varia a seconda del database. Oracle non supporta direttamente UPDATE con JOIN e richiede un approccio diverso usando sottoquery o l’istruzione MERGE.

Quali sono le alternative a UPDATE con JOIN in SQL?

L’uso di sottoquery o dell’istruzione MERGE sono alternative appropriate a UPDATE con JOIN.

Argomenti

Impara SQL con DataCamp

Corso

Manipolazione dei dati in SQL

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

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

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

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