MySQL: Como fazer UPDATE baseado em SELECT usando JOIN

Atualizar dados em uma tabela com base em outra consulta é um cenário comum no dia a dia com MySQL. Porém, nem sempre a sintaxe mais intuitiva funciona corretamente.

O Problema

Você precisa atualizar uma tabela (cursos) com dados vindos de outra (cursos_abas), filtrando por uma condição específica (ex: título = ‘APRESENTAÇÃO’).

Tentativas usando subquery direta no UPDATE podem falhar ou gerar comportamentos inesperados dependendo da estrutura.

A Solução

Utilize um UPDATE com JOIN, que é a forma mais segura e performática nesse tipo de operação:

UPDATE cursos dest
JOIN cursos_abas src 
    ON dest.id = src.curso_id
SET dest.introducao = src.html
WHERE src.titulo = 'APRESENTAÇÃO';

Por que usar JOIN?

O JOIN permite relacionar diretamente as tabelas no momento do UPDATE, evitando ambiguidades e garantindo melhor performance.

Evite isso:

UPDATE cursos dest,
(SELECT *
 FROM cursos_abas
 WHERE titulo = 'APRESENTAÇÃO') AS src
SET dest.introducao = src.html
WHERE dest.id = src.curso_id;

Apesar de funcionar em alguns casos, esse padrão pode causar problemas de leitura, manutenção e até inconsistência dependendo do volume de dados.

Conclusão

Para atualizar registros com base em outra tabela no MySQL, prefira sempre UPDATE com JOIN. É mais claro, performático e confiável para cenários reais.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima