Pular para o conteúdo principal
InicioTutoriaisSQL

SQL UPDATE com JOIN: Como funciona

Saiba como o UPDATE com JOIN no SQL simplifica as atualizações entre tabelas no SQL Server. Entenda como INNER JOIN e LEFT JOIN diferem em casos de uso específicos e explore alternativas usando subconsultas ou a instrução MERGE.
Actualizado 1 de out. de 2024  · 9 min leer

A consistência dos dados é importante para a confiabilidade e a integridade dos bancos de dados relacionais. Ao modificar dados existentes em tabelas relacionadas, usamos a instrução UPDATE com a cláusula JOIN para obter a consistência dos dados. A operação UPDATE with JOIN é compatível com o SQL Server e é útil para garantir a sincronização precisa dos dados entre as tabelas.

A operação SQL JOIN permite atualizações mais complexas além das operações de tabela única por meio de chaves estrangeiras compartilhadas entre as diferentes tabelas. A operação UPDATE com JOIN é útil para desenvolvedores e administradores de banco de dados, pois aumenta a eficiência e reduz os riscos de inconsistências de dados. 

Antes de começar, recomendo que você faça o curso Introdução ao SQL Server da DataCamp para se familiarizar com o funcionamento dos bancos de dados do SQL Server. Este tutorial foi escrito especificamente com o SQL Server em mente. Além disso, confira nosso tutorial, Introdução às uniões de SQL, para saber como usar JOIN ao trabalhar com várias tabelas no SQL.

Como usar o SQL UPDATE com JOIN

No SQL Server, a operação UPDATE with JOIN permite que você atualize os registros de uma tabela com base nos dados correspondentes de outra. Essa técnica é particularmente útil ao sincronizar dados em várias tabelas.

Usando o SQL UPDATE com INNER JOIN

O INNER JOIN no SQL recupera linhas/registros com dados correspondentes em ambas as tabelas. Quando usado com a instrução UPDATE, um INNER JOIN garante que somente os registros na tabela de destino que tenham correspondências na tabela unida sejam atualizados.

A estrutura típica do site UPDATE com INNER JOIN envolve a especificação da tabela de destino que precisa ser atualizada e a definição das colunas a serem atualizadas. A estrutura também inclui o uso do site INNER JOIN para vinculá-lo a outra tabela com base em uma coluna comum para atualizar apenas os registros necessários.

Exemplo de INNER JOIN

Suponha que você esteja gerenciando um banco de dados de varejo em que precisa atualizar uma tabela Sales para sincronizar com as alterações na tabela Customer. Um cliente mudou recentemente seu método de contato preferido e você gostaria que essas alterações fossem refletidas nas duas tabelas. Você usará o UPDATE com INNER JOIN para garantir que apenas os registros de vendas relacionados aos clientes que atualizaram suas informações de contato sejam modificados sem afetar outras linhas nos dados.

-- 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);

Práticas recomendadas de UPDATE com INNER JOIN

Ao usar o UPDATE com o INNER JOIN, considere as seguintes práticas recomendadas para que você faça consultas eficientes.

  • Use índices em colunas de união: Certifique-se de que as colunas usadas na condição JOIN estejam indexadas para otimizar o desempenho, acelerando a execução da consulta.

  • Limitar o escopo da atualização: Use a cláusula WHERE para garantir que somente as linhas relevantes sejam atualizadas e melhorar o desempenho da consulta.

Usando o SQL UPDATE com LEFT JOIN

O site LEFT JOIN é usado para recuperar todos os registros da tabela da esquerda (primeira) e os registros correspondentes da tabela da direita (segunda). Uma consulta com LEFT JOIN retornará NULL resultados da tabela correta se não houver resultados correspondentes. Quando usado com a instrução UPDATE, o LEFT JOIN pode atualizar registros mesmo quando não houver dados correspondentes na segunda tabela, o que é útil para preencher dados ausentes. Confira nossa Folha de consulta de junções SQL se você quiser revisar as uniões de SQL.

Exemplo de LEFT JOIN

Considere o cenário em que você está gerenciando um banco de dados para uma loja de varejo on-line. A tabela Customers contém uma lista de todos os clientes, enquanto a tabela Orders contém detalhes dos pedidos feitos por alguns desses clientes. Você usará o site LEFT JOIN para recuperar e atualizar os detalhes do pedido de todos os clientes, inclusive daqueles que ainda não fizeram um pedido. Esse método preencherá os dados ausentes dos clientes que não têm pedidos feitos com um valor NULL ou especificado.

Nosso exemplo com LEFT JOIN será um pouco diferente porque LEFT JOIN retorna os valores de NULL se nenhum registro correspondente for encontrado na tabela correta. Por esse motivo, é importante que você descubra como lidar com esses valores em NULLVocê pode lidar com os valores de NULL definindo um valor padrão nas colunas a serem atualizadas. Usando a função COALESCE(), o LEFT JOIN incluirá uma condição para um valor padrão para os dados ausentes. A consulta a seguir mostra como você pode definir um valor padrão para os valores de 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;

Você também pode usar as funções COALESCE() ou IFNULL() para lidar com os valores de NULL que envolvem cálculos antes de atualizar as colunas. Para saber mais, confira nosso tutorial sobre a função SQL COALESCE().

Práticas recomendadas de UPDATE com LEFT JOIN

Ao usar o UPDATE com o LEFT JOIN, considere as seguintes práticas recomendadas para que você faça consultas eficientes.

  • Use referências explícitas a colunas: Em vez de usar SELECT *, especifique explicitamente as colunas que você deseja atualizar para tornar sua consulta mais clara e evitar atualizações não intencionais.

  • Use índices em colunas de união: Certifique-se de que as colunas usadas na condição JOIN estejam indexadas para melhorar o desempenho da operação JOIN e o tempo geral de execução da consulta.

Considerações sobre o desempenho do SQL Update com Join

Untender as implicações de desempenho ao usar UPDATE com JOIN no SQL é importante para garantir que suas consultas sejam executadas com eficiência. O desempenho dessas operações pode ser influenciado por vários fatores, inclusive o tamanho das tabelas usadas, o tipo de junção usado e a existência ou não de índices adequados.

Índices e velocidade de consulta

A indexação das colunas envolvidas na condição de união é importante para acelerar o processo de atualização. Quando você indexa as colunas adequadamente, a operação localiza apenas as linhas correspondentes durante a união, reduzindo o tempo necessário para a varredura da tabela.

Impacto de grandes conjuntos de dados

Ao trabalhar com grandes conjuntos de dados, as execuções de consultas podem ser mais lentas devido a operações que consomem muitos recursos. Considere as práticas recomendadas a seguir para reduzir os problemas de desempenho com grandes conjuntos de dados. Além disso, experimente o curso de habilidades SQL Server for Database Administrators se você for projetar ou manter bancos de dados regularmente como parte do seu trabalho. 

  • Atualizações de lote: Divida as atualizações em lotes menores para reduzir a carga no banco de dados e atualizar os registros com eficiência.

  • Limite o escopo da atualização: Ao usar a cláusula WHERE, você especifica as linhas a serem atualizadas, reduzindo o tempo de processamento das consultas.

Erros comuns e como evitá-los

Há alguns erros comuns que você pode encontrar ao usar UPDATE com JOIN no SQL Server. Esses erros podem levar a problemas de desempenho ou à atualização de dados não intencionais. A seguir, você encontrará alguns desses erros e como evitá-los.

Atualizações não intencionais

Se você não especificar corretamente a condição de união, o site UPDATE com JOIN atualizará mais registros do que o pretendido. Esse erro atualizará uma tabela inteira em vez do subconjunto necessário. Para evitar esse erro, certifique-se sempre de que você use uma condição JOIN precisa para atualizar as linhas necessárias.

Produtos cartesianos

Um produto cartesiano ocorre quando a condição de união está incorreta ou ausente, o que faz com que a consulta combine todas as linhas da tabela da esquerda com todas as linhas da tabela da direita. Esse problema pode tornar a operação de consulta mais lenta e produzir resultados imprecisos. Para evitar esse erro, sempre verifique se você tem a condição JOIN definida corretamente. Além disso, certifique-se de que você indique as colunas corretas para aplicar a condição de união.

Alternativas ao SQL UPDATE com JOIN

Embora o UPDATE com JOIN seja um método eficiente para atualizar registros em tabelas relacionadas, há métodos alternativos para realizar a atualização. A seguir estão algumas opções.

Subconsultas

As subconsultas são uma alternativa importante ao site JOIN quando você deseja realizar atualizações com base em uma condição simples. Com as subconsultas, você evitará várias tabelas complexas especificando a condição na subconsulta.

O exemplo a seguir mostra como você pode usar uma subconsulta para atualizar a tabela Sales com a última CustomerStatus da tabela 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
);

Declaração MERGE

A instrução MERGE é um comando SQL versátil que permite que você execute operações UPDATE, INSERT ou DELETE em uma única consulta com base na comparação de duas tabelas. O comando MERGE é útil quando você precisa sincronizar dados entre duas tabelas, manipulando linhas correspondentes e não correspondentes.

O uso da instrução MERGE é útil porque fornece um método conciso para executar várias operações em uma única consulta. A sintaxe da instrução MERGE é a seguinte.

-- 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;

Conclusão

É importante que você saiba como usar o UPDATE com JOIN no SQL Server para fazer atualizações eficientes de dados entre tabelas em bancos de dados relacionais. Essa técnica permite que você atualize registros em uma tabela com base em dados correspondentes em outra, garantindo a consistência e a sincronização dos dados em tabelas relacionadas. A aplicação dessas técnicas e práticas recomendadas pode aprimorar as operações do seu banco de dados, garantindo um gerenciamento de dados preciso, eficiente e confiável. 

Se você quiser aprimorar suas habilidades em SQL, recomendo que confira o curso de habilidades SQL Server Fundamentals do DataCamp para melhorar suas habilidades de análise de dados. O curso Writing Functions and Stored Procedures in SQL Server também ajudará você a aprender a manipular dados de forma eficiente no SQL Server. Se você estiver se preparando para a entrevista sobre SQL, recomendo que leia a publicação do nosso blog, 20 Top SQL Joins Interview Questions, para ajudá-lo a se preparar. Por fim, se você deseja aplicar suas habilidades em SQL em uma carreira como engenheiro de dados, considere também fazer o nosso curso de carreira de engenheiro de dados em Python, que inclui uma certificação no final.

Torne-se um engenheiro de dados

Torne-se um engenheiro de dados por meio do aprendizado avançado de Python
Comece a Aprender De Graça

Photo of Allan Ouko
Author
Allan Ouko
LinkedIn
Eu crio artigos que simplificam a ciência e a análise de dados, tornando-as fáceis de entender e acessíveis.

Perguntas frequentes sobre SQL

Qual é a finalidade de usar UPDATE com JOIN no SQL?

UPDATE com JOIN permite que você atualize registros em uma tabela com base em dados correspondentes de outra tabela.

Como um INNER JOIN difere de um LEFT JOIN quando usado em um comando UPDATE?

Um INNER JOIN atualiza apenas os registros que têm linhas correspondentes em ambas as tabelas, enquanto um LEFT JOIN atualiza todos os registros na tabela de destino, inclusive aqueles que não têm uma linha correspondente na tabela unida, preenchendo dados ausentes ou manipulando valores NULL.

Quais são os problemas de desempenho do UPDATE com JOIN no SQL?

Tabelas/conjuntos de dados grandes podem afetar o desempenho da consulta em UPDATE com JOIN, pois exigem mais poder de processamento.

Quais bancos de dados suportam UPDATE com JOIN IN SQL?

O conceito UPDATE com JOIN funciona no SQL Server, MySQL e PostgreSQL, embora a sintaxe seja diferente dependendo do banco de dados. A Oracle não oferece suporte a UPDATE com JOIN diretamente e requer uma abordagem diferente usando subconsultas ou a instrução MERGE.

Quais são as alternativas de UPDATE com JOIN no SQL?

O uso de subconsultas ou a instrução MERGE são alternativas apropriadas de UPDATE com JOIN.

Temas

Aprenda SQL com a DataCamp

Course

Joining Data in SQL

4 hr
164.6K
Level up your SQL knowledge and learn to join tables together, apply relational set theory, and work with subqueries.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

Tutorial do Insert Into SQL

A instrução "INSERT INTO" do SQL pode ser usada para adicionar linhas de dados a uma tabela no banco de dados.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

Tutorial de visão geral do banco de dados SQL

Neste tutorial, você aprenderá sobre bancos de dados em SQL.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

QUALIFICAR: A instrução de filtragem SQL que você nunca soube que precisava

Saiba mais sobre a cláusula SQL QUALIFY, um método de filtragem essencial, porém menos conhecido, no SQL. Entenda sua sintaxe, usos e como ela difere de outros métodos de filtragem SQL.
Kurtis Pykes 's photo

Kurtis Pykes

8 min

See MoreSee More