Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
- Código
- ce403647
- Banca
- CESPE / CEBRASPE
- Órgão
- TCE AC
- Ano
- 2024
- Cargo
- ATI ( )

- CCerto
- EErrado

GabaritoE — Errado
Gabarito: Errado. A consulta apresentada lista os hospitais que tiveram gastos com fisioterapia, e não os que não tiveram. O operador EXISTS retorna verdadeiro quando a subconsulta retorna ao menos uma linha, ou seja, quando existe um registro de gasto com fisioterapia para aquele hospital — exatamente o oposto do que o enunciado pede. Para listar os hospitais sem gastos com fisioterapia, seria necessário usar NOT EXISTS (ou NOT IN).
A questão cobra o entendimento do operador EXISTS em subconsultas correlacionadas. Uma subconsulta correlacionada é aquela que referencia colunas da consulta externa — aqui, g.id_hospital = h.id_hospital. O EXISTS avalia se a subconsulta retorna pelo menos uma linha; se retornar, a condição é verdadeira e a linha da consulta externa é incluída no resultado. Portanto, o EXISTS é um teste de existência, não de ausência.
Para ilustrar, imagine um hospital H1 que possui um registro de gasto com fisioterapia. A subconsulta SELECT 1 FROM gastos g WHERE g.id_hospital = H1 AND g.id_tipo_gasto_saude = (id da fisioterapia) retornará uma linha, fazendo o EXISTS ser verdadeiro e H1 aparecer no resultado. Já um hospital H2 sem esse registro fará a subconsulta retornar vazio, o EXISTS será falso e H2 ficará de fora. O resultado final é exatamente a lista dos hospitais com gastos de fisioterapia.
A pegadinha está na inversão do operador: para obter o complemento (hospitais sem o gasto), o correto seria WHERE NOT EXISTS (...). Essa é uma distinção clássica entre EXISTS e NOT EXISTS, e a banca explora justamente a troca de um pelo outro. Guarde a regra: EXISTS = existe pelo menos um → inclui; NOT EXISTS = não existe nenhum → inclui. É nessa fronteira que a questão se decide.
A consulta usa WHERE EXISTS, que retorna os hospitais para os quais a subconsulta encontra ao menos um registro de gasto com fisioterapia. O enunciado pede os hospitais que não tiveram gastos com fisioterapia, o que exigiria WHERE NOT EXISTS. Portanto, a consulta está logicamente invertida: ela lista os hospitais que tiveram gastos com fisioterapia, não os que não tiveram.
A banca troca o operador EXISTS por NOT EXISTS. O candidato que lê rápido associa a subconsulta sobre fisioterapia à resposta correta, sem perceber que o EXISTS testa a presença de registros, não a ausência. Para listar os hospitais sem gastos, o comando correto seria WHERE NOT EXISTS (...). Com treino, você enxerga essa inversão de longe 💪.
Gabarito: Errado.
Link permanente: /questoes/ce403647