Questão de Banco de Dados — Geral — CESPE / CEBRASPE 2026
Banco de Dados›Geral
Código
ce391459
Banca
CESPE / CEBRASPE
Órgão
TCE RN
Ano
2026
Cargo
AudCE ( )
Um tribunal de contas implementou um data lake para auditoria contínua de contratos administrativos, utilizando ingestão incremental via CDC (change data capture). Os dados são armazenados na tabela contratos_cdc, que contém múltiplas versões de registros ao longo do tempo. A tabela contratos_cdc tem as colunas a seguir.
• id_contrato (identificador do contrato); • valor (valor do contrato); • status (situação do contrato); • data_atualizacao (timestamp da alteração).
Um auditor do referido tribunal deseja realizar a seguinte consulta SQL.
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.
CCerto
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”.
SQL – CTE e Função de Janela para Isolar a Versão Mais Recente
Gabarito: Certo. A CTE apresentada é semanticamente equivalente à consulta original, pois ambas isolam a versão mais recente de cada contrato usando uma função de janela (ROW_NUMBER) particionada por id_contrato e ordenada por data_atualizacao em ordem decrescente, sob a premissa de ordenação unívoca. A CTE apenas encapsula a lógica de ranking em um bloco nomeado, sem alterar o resultado lógico.
A questão trata de um padrão clássico em bancos de dados com versionamento de registros (como tabelas alimentadas por CDC – Change Data Capture): obter o estado mais recente de cada entidade. A tabela contratos_cdc guarda múltiplas versões de cada contrato, identificadas pelo timestamp data_atualizacao. O objetivo da consulta é, para cada id_contrato, retornar apenas a linha com a data_atualizacao mais recente.
A ferramenta adequada para isso é a função de janela ROW_NUMBER(), que atribui um número sequencial a cada linha dentro de uma partição, conforme uma ordenação definida. No padrão, particiona-se por id_contrato e ordena-se por data_atualizacao DESC, de modo que a linha mais recente recebe o número 1. Em seguida, filtra-se apenas as linhas com número igual a 1. Esse é o padrão conhecido como "último registro por grupo".
A CTE (Common Table Expression) é um recurso que permite nomear uma subconsulta e referenciá-la na consulta principal, melhorando a legibilidade e a organização do código. Ela não altera a semântica da consulta: é apenas uma forma de estruturar o SQL. Portanto, se a consulta original usa ROW_NUMBER() diretamente no FROM ou na subconsulta, e a CTE encapsula exatamente essa mesma lógica, os resultados são idênticos.
A premissa de que data_atualizacao permite uma ordenação unívoca para cada id_contrato é essencial: garante que não haja empates na ordenação, ou seja, que cada contrato tenha exatamente uma versão com o timestamp mais recente. Sem essa premissa, o ROW_NUMBER() poderia atribuir números arbitrários em caso de empate, e o resultado poderia variar entre as duas abordagens. Como a premissa é explicitamente dada, a equivalência é garantida.
PEGA ESSA DICA!
Para identificar se duas consultas são semanticamente equivalentes, verifique se a CTE apenas encapsula a lógica existente ou se introduz alguma transformação. Se a CTE contém exatamente a mesma subconsulta que a consulta original, a equivalência é direta. Fique atento a diferenças em cláusulas WHERE, JOINs ou funções de janela.
1Particionar por id_contrato
2Ordenar por data_atualizacao DESC
3ROW_NUMBER() = 1
4Filtrar ranking = 1
LEVEL · soulevel.com.br
Item — ✅ Correto
A afirmação está correta. A CTE encapsula a lógica de ranking (ROW_NUMBER() particionado por id_contrato e ordenado por data_atualizacao DESC) e a consulta principal filtra as linhas com ranking = 1. Isso produz exatamente o mesmo resultado lógico que a consulta original, que aplica a mesma função de janela diretamente. A premissa de ordenação unívoca elimina ambiguidades de empate, garantindo a equivalência.