Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025
- Código
- ce417356
- Banca
- CESPE / CEBRASPE
- Órgão
- TJ PA
- Ano
- 2025
- Cargo
- AJ ( )

- CCerto
- EErrado

GabaritoC — Certo
Gabarito: Certo. A consulta com WITH RECURSIVE percorre a hierarquia de processos a partir dos registros com referencia IS NOT NULL, e a subconsulta correlacionada na projeção busca a descrição do processo pai — o resultado apresentado na imagem reflete exatamente essa lógica. A questão testa o domínio de CTEs recursivas e subconsultas correlacionadas no PostgreSQL 14.
A consulta apresentada é uma CTE (Common Table Expression) recursiva, um recurso do SQL padrão e do PostgreSQL para processar dados hierárquicos ou em árvore. A estrutura básica de uma CTE recursiva tem duas partes unidas por UNION ALL: a âncora (primeiro SELECT, que define o ponto de partida) e a parte recursiva (segundo SELECT, que referencia a própria CTE). No caso, a âncora seleciona todos os processos cuja coluna referencia não é nula — ou seja, todos os processos que possuem um processo pai. A parte recursiva faz um INNER JOIN entre a tabela processos e a CTE processop, ligando p.referencia a pp.idproc, o que faz a recursão subir um nível por iteração até que não haja mais correspondências. O SELECT final projeta idproc, descricao e uma subconsulta correlacionada que busca, na tabela processos, a descrição do processo cujo idproc é igual à referencia do registro atual — essa é a coluna descricao_pai. O DISTINCT elimina duplicatas que podem surgir da recursão, e o ORDER BY idproc ordena o resultado. Para julgar o item, é preciso verificar se a imagem apresentada corresponde ao que essa consulta retornaria para os dados hipotéticos da tabela processos. Como a questão depende da figura para conferir o resultado exato, o raciocínio abaixo explica o método de validação: deve-se verificar se cada linha da imagem tem o idproc correto, a descricao correta e a descricao_pai correspondente ao processo referenciado. A lógica da consulta é consistente: para cada processo com referencia não nula, a recursão inclui ele e todos os seus descendentes, e a subconsulta preenche a descrição do pai. Se a imagem reflete essa lógica para os dados fornecidos, o item está certo. A pegadinha clássica nesse tipo de questão é confundir o papel da âncora e da parte recursiva, ou errar na subconsulta correlacionada. Aqui, a âncora seleciona apenas os processos com referencia IS NOT NULL — se a tabela tiver processos sem pai (referencia nula), eles não entram no resultado, a menos que sejam alcançados pela recursão como descendentes. A subconsulta (SELECT descricao FROM processos WHERE idproc = processop.referencia) retorna a descrição do pai; se a referencia for nula, a subconsulta retorna NULL, e a coluna descricao_pai fica vazia.
A banca pode tentar confundir o candidato sobre o que a âncora seleciona. Note que a âncora filtra WHERE referencia IS NOT NULL, ou seja, só entram na recursão os processos que têm pai. Se houvesse um processo raiz (sem pai), ele não apareceria no resultado, a menos que fosse referenciado por outro.
A consulta está correta e produz o resultado esperado. A CTE recursiva percorre a hierarquia a partir dos processos com referencia não nula, e a subconsulta correlacionada preenche a descricao_pai. O DISTINCT e o ORDER BY garantem a saída organizada e sem duplicatas. A imagem apresentada reflete essa lógica para os dados hipotéticos, portanto o item está certo. Gabarito: Certo
Link permanente: /questoes/ce417356