Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
- Código
- ce403623
- Banca
- CESPE / CEBRASPE
- Órgão
- MPO
- Ano
- 2024
- Cargo
- APO ( )
- CCerto
- EErrado
GabaritoC — Certo
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.
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