Pular para o conteúdo principal

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

Banco de DadosSQL
Código
ce229667
Banca
CESPE / CEBRASPE
Órgão
TCE-RN
Ano
2026
Nível
Superior
Cargo
Auditor de Controle Externo - Especialidade: Tecnologia da Informação
A partir das informações apresentadas e do trecho de código SQL precedente, julgue o item a seguir.No que concerne à manipulação de dados em larga escala e à organização de consultas SQL, a utilização da CTE (common table expression) apresentada a seguir para encapsular a lógica de ranking é semanticamente equivalente à consulta SQL apresentada, pois ambas as abordagens produzem o mesmo resultado lógico ao isolar a versão mais recente de cada contrato, sob a premissa de que a coluna data_atualizacao permita uma ordenação unívoca para cada id_contrato.Imagem associada para resolução da questão
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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”.
SE LIGUE NESSA!

Esta questão depende de um texto-base e de um trecho de código SQL que não estão disponíveis aqui. O raciocínio abaixo explica o método para julgar a equivalência semântica entre uma CTE e uma consulta SQL; confira os dados e o código na prova original.

Equivalência semântica entre CTE e consulta SQL

Gabarito: Certo (C). A afirmação está correta porque, sob a premissa de que a coluna data_atualizacao permite uma ordenação unívoca para cada id_contrato, tanto a CTE quanto a consulta SQL apresentada produzem o mesmo resultado lógico: isolar a versão mais recente de cada contrato. A equivalência semântica entre as duas abordagens é exatamente o que a questão afirma.

Uma CTE (common table expression) é um recurso do SQL que permite criar um conjunto de resultados temporário, nomeado, que existe apenas durante a execução da consulta. Ela é definida com a cláusula WITH e pode ser referenciada na consulta principal, funcionando como uma "tabela virtual" que organiza e encapsula a lógica. A principal vantagem da CTE é a legibilidade e a modularidade: em vez de escrever uma subconsulta complexa dentro do FROM ou do WHERE, o desenvolvedor pode nomear uma etapa intermediária e reutilizá-la.

A questão trata de um cenário comum em bancos de dados: uma tabela de contratos que possui múltiplas versões para o mesmo id_contrato, cada uma com uma data_atualizacao. O objetivo é obter apenas a versão mais recente de cada contrato. Para isso, existem duas abordagens principais:

  1. Usar uma função de janela (window function), como ROW_NUMBER(), que numera as linhas dentro de cada partição (PARTITION BY id_contrato) em uma ordem específica (ORDER BY data_atualizacao DESC). Depois, filtra-se apenas as linhas com número 1.

  2. Usar uma subconsulta correlacionada ou um JOIN com uma subconsulta que encontra a data máxima para cada contrato.

A CTE apresentada na questão encapsula a lógica de ranking, provavelmente usando ROW_NUMBER() ou uma subconsulta para identificar a versão mais recente. A consulta SQL alternativa, por sua vez, pode usar uma abordagem diferente, mas que produz o mesmo resultado lógico.

A premissa de que a coluna data_atualizacao permite uma ordenação unívoca para cada id_contrato é crucial. Isso significa que não há duas versões do mesmo contrato com a mesma data de atualização. Sem essa premissa, a ordenação não seria determinística e o resultado poderia variar entre as duas abordagens, quebrando a equivalência. Com a premissa, ambas as consultas retornam exatamente o mesmo conjunto de linhas: para cada id_contrato, a linha com a maior data_atualizacao.

A equivalência semântica não significa que as duas consultas sejam escritas da mesma forma ou que o SGBD as execute da mesma maneira. Significa que, para qualquer estado do banco de dados que satisfaça a premissa, o resultado lógico (o conjunto de tuplas retornado) é idêntico. Essa é a definição de equivalência semântica em SQL: duas consultas são equivalentes se produzem o mesmo resultado para todos os bancos de dados válidos.

A pegadinha da banca, neste caso, é justamente a premissa da ordenação unívoca. Se a coluna data_atualizacao não fosse única para cada id_contrato, a equivalência poderia falhar. Por exemplo, se houvesse duas versões do mesmo contrato com a mesma data, a CTE com ROW_NUMBER() escolheria uma arbitrariamente (dependendo da ordem de processamento), enquanto a consulta com MAX(data_atualizacao) retornaria as duas linhas. A questão, ao explicitar a premissa, garante que essa ambiguidade não existe e que a equivalência é válida.

NÃO CAIA NESSA!

A banca explora a premissa da ordenação unívoca. O candidato pode achar que a equivalência é sempre verdadeira, mas ela depende dessa condição. Se houvesse empates na data_atualizacao, as duas consultas poderiam produzir resultados diferentes. A questão, ao afirmar a premissa, torna a equivalência correta.

Item — ✅ Certo

A afirmação está correta. A CTE e a consulta SQL são semanticamente equivalentes porque, sob a premissa de que data_atualizacao permite uma ordenação unívoca para cada id_contrato, ambas isolam a versão mais recente de cada contrato. A CTE encapsula a lógica de ranking, e a consulta alternativa produz o mesmo resultado lógico. A premissa é essencial para garantir a equivalência, pois elimina a ambiguidade de empates na data de atualização.

Gabarito: Certo (C).

Link permanente: /questoes/ce229667