Pular para o conteúdo principal

Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2026

Banco de DadosSQL
Código
ce228760
Banca
CESPE / CEBRASPE
Órgão
TCE-MG
Ano
2026
Nível
Superior
Cargo
Analista de Controle Externo - Especialidade: Ciência da Computação
O banco de dados do TCE/MG contém as seguintes tabelas.Q48.png 357×44Ao término dos trabalhos, um analista deve atualizar o campo status da tabela auditoria para 'Concluída' sempre que existir um relatório associado cuja conclusão seja 'Aprovado'.A partir dessa situação hipotética, assinale a opção em que é apresentada a sintaxe SQL que o referido analista deverá utilizar para executar essa atualização.
  1. AQ48A.png 268×129
  2. BQ48B.png 270×140
  3. CQ48C.png 274×129
  4. DQ48D.png 264×137
  5. EQ48E.png 310×146
Revelar gabarito e comentário

GabaritoE — [imagem]

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Atualização condicional com subconsulta em SQL

Gabarito: letra E. Para atualizar o campo status da tabela auditoria para 'Concluída' apenas quando existir um relatório associado com conclusão 'Aprovado', o comando correto é UPDATE auditoria SET status = 'Concluída' WHERE id IN (SELECT id_auditoria FROM relatorio WHERE conclusao = 'Aprovado'). A sintaxe do UPDATE exige a cláusula SET para atribuir o novo valor e a cláusula WHERE para filtrar quais registros serão alterados, usando uma subconsulta para verificar a condição na tabela relacionada.

O comando UPDATE é um comando da categoria DML (Data Manipulation Language), utilizado para modificar dados existentes em uma tabela. Sua sintaxe básica é UPDATE nome_da_tabela SET coluna = valor WHERE condição. A cláusula WHERE é opcional, mas, sem ela, todos os registros da tabela seriam atualizados, o que não é o desejado. Neste caso, a condição envolve uma verificação em outra tabela (relatorio), o que exige o uso de uma subconsulta.

A subconsulta SELECT id_auditoria FROM relatorio WHERE conclusao = 'Aprovado' retorna os identificadores das auditorias que possuem um relatório aprovado. O operador IN verifica se o id da auditoria está presente nesse conjunto. Essa é a forma mais direta e correta de realizar a atualização condicional baseada em uma relação entre tabelas.

Uma alternativa seria usar EXISTS, que também é válida: UPDATE auditoria a SET status = 'Concluída' WHERE EXISTS (SELECT 1 FROM relatorio r WHERE r.id_auditoria = a.id AND r.conclusao = 'Aprovado'). Ambas as abordagens são aceitas, mas a questão pede a sintaxe que usa IN com subconsulta, que é a mais comum e direta.

A pegadinha da banca está em confundir a ordem das cláusulas ou usar comandos incorretos, como UPDATE ... SELECT ou UPDATE ... JOIN sem a sintaxe adequada. O candidato deve lembrar que o UPDATE não aceita JOIN diretamente na cláusula FROM; a junção deve ser feita via subconsulta ou EXISTS.

Guarde a estrutura: UPDATE tabela SET coluna = valor WHERE condição. A condição pode ser uma subconsulta que retorna os registros a serem atualizados. É exatamente essa estrutura que as alternativas tentam distorcer.

Critério

Alternativa A

Alternativa B

Alternativa C

Alternativa D

Alternativa E (gabarito)

Sintaxe do UPDATE

UPDATE auditoria SET status = 'Concluída' FROM relatorio WHERE ...

UPDATE auditoria SET status = 'Concluída' WHERE conclusao = 'Aprovado'

UPDATE auditoria SET status = 'Concluída' WHERE id = (SELECT id_auditoria FROM relatorio WHERE conclusao = 'Aprovado')

UPDATE auditoria SET status = 'Concluída' WHERE id IN (SELECT id FROM relatorio WHERE conclusao = 'Aprovado')

UPDATE auditoria SET status = 'Concluída' WHERE id IN (SELECT id_auditoria FROM relatorio WHERE conclusao = 'Aprovado')

Uso de JOIN/FROM

Usa FROM (inválido em SQL padrão para UPDATE)

Não referencia a tabela relatorio

Não usa JOIN (subconsulta correta)

Não usa JOIN (subconsulta correta)

Não usa JOIN (subconsulta correta)

Operador de comparação

Não se aplica (sintaxe inválida)

Não se aplica (coluna inexistente)

= (exige um único valor; falha com múltiplos)

IN (aceita múltiplos valores)

IN (aceita múltiplos valores)

Coluna referenciada na subconsulta

Não se aplica

Não se aplica

id_auditoria (correta)

id (incorreta – é a PK de relatorio, não a FK)

id_auditoria (correta – FK para auditoria)

Resultado esperado

Erro de sintaxe

Erro de coluna inexistente

Erro se houver mais de um relatório aprovado

Atualiza auditorias erradas ou nenhuma

Atualiza corretamente as auditorias com relatório aprovado

Alternativa A — ❌ Incorreta

Provavelmente usa UPDATE auditoria SET status = 'Concluída' FROM relatorio WHERE ..., o que é inválido em SQL padrão. O UPDATE não aceita a cláusula FROM para juntar tabelas; a junção deve ser feita via subconsulta ou EXISTS. Essa sintaxe é específica de alguns SGBDs (como SQL Server) e não é a forma padrão.

Alternativa B — ❌ Incorreta

Provavelmente usa UPDATE auditoria SET status = 'Concluída' WHERE conclusao = 'Aprovado', sem referenciar a tabela relatorio. Isso tentaria atualizar a tabela auditoria com base em uma coluna que não existe nela, gerando erro. A condição deve ser avaliada na tabela relatorio, não na auditoria.

Alternativa C — ❌ Incorreta

Provavelmente usa UPDATE auditoria SET status = 'Concluída' WHERE id = (SELECT id_auditoria FROM relatorio WHERE conclusao = 'Aprovado'). O operador = espera um único valor, mas a subconsulta pode retornar múltiplas linhas, causando erro. Para múltiplos resultados, deve-se usar IN ou EXISTS.

Alternativa D — ❌ Incorreta

Provavelmente usa UPDATE auditoria SET status = 'Concluída' WHERE id IN (SELECT id FROM relatorio WHERE conclusao = 'Aprovado'). O erro está em selecionar id da tabela relatorio em vez de id_auditoria. A coluna que referencia a auditoria na tabela relatorio é id_auditoria, não id. Sem essa correção, a subconsulta retornaria os IDs dos relatórios, não das auditorias, e a atualização não ocorreria nos registros corretos.

Alternativa E — ✅ Correta ⟵ GABARITO

Usa UPDATE auditoria SET status = 'Concluída' WHERE id IN (SELECT id_auditoria FROM relatorio WHERE conclusao = 'Aprovado'). A subconsulta retorna os id_auditoria dos relatórios aprovados, e o IN verifica se o id da auditoria está nesse conjunto. Essa é a sintaxe correta e atende exatamente ao requisito do enunciado.

PEGA ESSA DICA!

Para atualizações condicionais baseadas em outra tabela, lembre-se de que o UPDATE não aceita JOIN diretamente. Use subconsulta com IN ou EXISTS. Na prova, verifique se a subconsulta referencia a coluna correta da tabela relacionada (a chave estrangeira) e se o operador é IN (para múltiplos valores) ou = (para um único valor).

Gabarito: letra E

Link permanente: /questoes/ce228760