Pular para o conteúdo principal

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

Banco de DadosGeral
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.

Imagem associada para resolução da questã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”.

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.

  1. 1Particionar por id_contrato
  2. 2Ordenar por data_atualizacao DESC
  3. 3ROW_NUMBER() = 1
  4. 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.

Gabarito: Certo

Link permanente: /questoes/ce391459