Analista - Perfil 8 - TI / Sistemas e Desenvolvimento - Tarde
A analista Letícia realizou a seguinte consulta em Structured Query Language (SQL):WITH RECURSIVE anos (n) AS(SELECT 2020 UNION ALLSELECT n + 1 FROM anos WHERE n < 2025)SELECT * FROM anosLogo após, Letícia realizou outra consulta em SQL:SELECT 2024 FROM anosO sistema gerenciador de banco de dados usado por Letícia suporta o recurso Common Table Expression do SQL. As consultas efetuadas por Letícia retornaram, respectivamente:
Auma tupla e um erro;
Bseis tuplas e um erro;
Cum erro e duas tuplas;
Duma tupla e uma tupla;
Eseis tuplas e duas tuplas.
Revelar gabarito e comentário▾
GabaritoB — seis tuplas e um erro;
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”.
Common Table Expression (CTE) Recursiva e Escopo
Gabarito: letra B — seis tuplas e um erro. A primeira consulta gera 6 tuplas (anos de 2020 a 2025) por meio de uma CTE recursiva, enquanto a segunda consulta gera um erro porque a CTE não existe fora do escopo da primeira instrução.
A questão testa dois conceitos importantes da linguagem SQL:
Funcionamento de uma CTE recursiva – que linhas são produzidas e até onde a recursão avança.
Escopo de uma CTE – uma CTE é definida apenas dentro da instrução que a contém; tentar referenciá-la em outra instrução resulta em erro.
Análise da primeira consulta
A CTE anos é definida com WITH RECURSIVE. O caso base (âncora) insere o valor 2020. A parte recursiva adiciona n + 1 para cada n que seja menor que 2025.
Primeira iteração: insere 2020 (âncora).
A recursão produz: 2021, 2022, 2023, 2024 e, quando n = 2024 (que é < 2025), adiciona 2025.
O resultado final é o conjunto: {2020, 2021, 2022, 2023, 2024, 2025} → 6 tuplas.
Consulta
Resultado
Motivo
Primeira (WITH RECURSIVE ... SELECT * FROM anos)
6 tuplas (2020, 2021, 2022, 2023, 2024, 2025)
A CTE recursiva gera os anos de 2020 a 2025, pois a condição WHERE n < 2025 controla a recursão, não o filtro final.
Segunda (SELECT 2024 FROM anos)
Erro
A CTE anos tem escopo limitado à primeira instrução; ao tentar referenciá-la em outra consulta, o SGBD retorna erro ("relation does not exist").
1WITH RECURSIVE anosCTE definida
2Âncora: SELECT 20201ª tupla
3Recursão: n+1 até 2025+5 tuplas
4Resultado: 6 tuplas
5SELECT 2024 FROM anosNova instrução
6CTE fora de escopo → erro
LEVEL · soulevel.com.br
PEGA ESSA DICA!
Em CTEs recursivas, a condição WHERE n < 2025 controla quais linhas da CTE geram novas linhas, não filtra o resultado final. Por isso o 2025 é incluído.
Análise da segunda consulta
A segunda consulta SELECT 2024 FROM anos tenta selecionar a constante 2024 da tabela anos. No entanto, a CTE anos foi definida apenas na primeira consulta. Uma CTE tem escopo limitado à instrução SQL em que foi declarada. Ao executar uma nova instrução, a CTE não existe mais, resultando em erro do tipo "relation 'anos' does not exist" (ou similar). Portanto, a segunda consulta retorna um erro.
NÃO CAIA NESSA!
A banca espera que o candidato confunda o escopo da CTE, achando que ela persiste para consultas posteriores. Em SQL, CTEs são efêmeras — duram apenas uma instrução.
Conclusão: Primeira consulta → 6 tuplas; segunda consulta → erro. Logo, alternativa B.