Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2026
- 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

- CCerto
- EErrado

GabaritoC — Certo
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.
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:
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.
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.
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.
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