Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403623
Banca
CESPE / CEBRASPE
Órgão
MPO
Ano
2024
Cargo
APO ( )
Julgue o item seguinte, relativos à linguagem de definição de dados SQL, à linguagem de manipulação de dados SQL, à linguagem de controle de dados SQL e à linguagem de consulta de dados SQL.   A cláusula with estipula uma relação temporária cuja definição está disponível apenas à consulta em que essa cláusula ocorre.
  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 – Cláusula WITH (Common Table Expression)

Gabarito: Certo. A cláusula WITH (também chamada de Common Table Expression – CTE) define uma relação temporária cujo escopo se limita à consulta em que é declarada, não persistindo no banco de dados. Essa é a definição clássica de CTE, presente na documentação dos principais SGBDs (PostgreSQL, SQL Server, Oracle) e em livros de referência como Elmasri & Navathe.

A cláusula WITH permite criar uma espécie de "tabela virtual" que existe apenas durante a execução da consulta. Ela é útil para simplificar consultas complexas, evitar repetição de subconsultas e melhorar a legibilidade. Diferentemente de uma tabela permanente ou de uma visão materializada, a CTE não é armazenada fisicamente no banco de dados; ela é apenas uma definição temporária que o SGBD utiliza durante o processamento da consulta.

Por exemplo, considere a consulta:

WITH vendas_2024 AS (
    SELECT vendedor_id, SUM(valor) AS total
    FROM vendas
    WHERE ano = 2024
    GROUP BY vendedor_id
)
SELECT vendedor_id, total
FROM vendas_2024
WHERE total > 10000;

Aqui, vendas_2024 é uma CTE que agrega as vendas do ano. Ela é usada na consulta principal, mas não fica disponível para outras consultas. Se você tentar referenciar vendas_2024 em uma consulta separada, receberá um erro, pois a CTE não existe fora do escopo da consulta em que foi definida.

É importante distinguir a CTE de outros objetos temporários:

Característica

CTE (WITH)

Tabela temporária (CREATE TEMPORARY TABLE)

Visão (VIEW)

Persistência

Apenas durante a consulta

Durante a sessão

Permanente (até ser dropada)

Escopo

Consulta única

Sessão

Banco de dados

Armazenamento físico

Não (apenas definição)

Sim (temporário)

Não (apenas definição, a menos que materializada)

Uso típico

Simplificar consultas complexas

Processamento em múltiplas consultas na mesma sessão

Reutilização de consultas frequentes

A pegadinha que a banca explora é confundir a CTE com a tabela temporária. Enquanto a tabela temporária persiste durante toda a sessão (e pode ser usada em várias consultas), a CTE é descartada ao final da consulta. O enunciado afirma exatamente isso: "a definição está disponível apenas à consulta em que essa cláusula ocorre". Isso está correto.

Guarde essa distinção: CTE = escopo da consulta; tabela temporária = escopo da sessão. É nessa fronteira que a questão se decide.

Item — ✅ CERTO

A afirmação está correta. A cláusula WITH define uma relação temporária (CTE) cuja definição está disponível apenas à consulta em que ocorre. Isso é uma característica fundamental das CTEs, presente na documentação dos principais SGBDs e em livros de referência. Não há exceção relevante: mesmo que uma CTE possa ser referenciada em subconsultas ou em outras CTEs dentro da mesma consulta, ela não persiste para consultas posteriores.

Gabarito: Certo

Link permanente: /questoes/ce403623