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.