Questão de Banco de Dados — SQL — Quadrix 2025
- Código
- qg599040
- Banca
- Quadrix
- Órgão
- CRMV-GO
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista Administrativo
- CCerto
- EErrado
GabaritoC — Certo
Esta questão depende de um texto-base/tabela compartilhado com outras questões da mesma prova, que não está disponível aqui. O raciocínio abaixo é o método de resolução — confira os dados no enunciado original.
Gabarito: CERTO (letra C). O comando apresentado está sintaticamente correto e semanticamente adequado ao que se propõe: filtra veterinários ativos cujo CRMV termina com "1234" e que possuam pelo menos um atendimento em clínica localizada em Goiânia, utilizando uma subconsulta correlacionada com EXISTS. A estrutura WHERE ... AND EXISTS (SELECT ... WHERE a.id_vet = v.id_vet ...) é exatamente o padrão de subconsulta correlacionada, pois a subconsulta referencia a tabela externa v.
A subconsulta correlacionada é um dos conceitos mais cobrados em SQL. Ela se caracteriza pelo fato de a subconsulta interna referenciar colunas da consulta externa — aqui, v.id_vet é usado dentro do WHERE da subconsulta. Isso faz com que a subconsulta seja reavaliada para cada linha da consulta externa, diferentemente de uma subconsulta não correlacionada, que é executada uma única vez e cujo resultado é independente da linha externa.
O operador EXISTS retorna verdadeiro se a subconsulta retornar pelo menos uma linha. No comando, para cada veterinário v que atende aos filtros ativo = 1 e crmv LIKE '%1234', o EXISTS verifica se existe algum registro em ATENDIMENTO a que, ao ser unido com CLINICA c pela chave id_clinica, tenha a.id_vet = v.id_vet e c.cidade = 'Goiânia'. Se existir, o veterinário é incluído no resultado. Isso corresponde exatamente à descrição do enunciado: "apenas veterinários ativos cujo CRMV termina com '1234' e que realizaram atendimentos na cidade de Goiânia".
Um ponto que merece atenção é a diferença entre EXISTS e IN. Enquanto IN compara um valor a uma lista de valores retornada pela subconsulta, EXISTS apenas testa a existência de linhas. Em muitos casos, EXISTS é mais eficiente, especialmente quando a subconsulta é correlacionada, pois o banco pode otimizar a execução. Além disso, EXISTS lida melhor com valores nulos, pois não depende de comparação de igualdade.
Outro detalhe importante é o uso do LIKE '%1234'. O curinga % no início significa que o padrão pode ser precedido por qualquer sequência de caracteres, ou seja, o CRMV deve terminar com "1234". Isso está correto para a condição "termina com '1234'". Se a intenção fosse que o CRMV contivesse "1234" em qualquer posição, o padrão seria '%1234%'. Aqui, a ausência do % no final garante que a string termine exatamente com "1234".
A junção INNER JOIN entre ATENDIMENTO e CLINICA é adequada, pois só interessa atendimentos que tenham uma clínica associada. A condição c.cidade = 'Goiânia' filtra as clínicas da cidade desejada. A correlação a.id_vet = v.id_vet garante que o atendimento pertence ao veterinário da linha externa.
Portanto, o comando está correto e atende plenamente ao que o enunciado descreve. A banca não inverteu nenhum conceito; a estrutura é a clássica de subconsulta correlacionada com EXISTS.
O comando está correto. A subconsulta é correlacionada porque referencia v.id_vet (coluna da consulta externa) dentro do WHERE da subconsulta. O EXISTS verifica a existência de atendimento em clínica de Goiânia para cada veterinário que já passou pelos filtros ativo = 1 e crmv LIKE '%1234'. A sintaxe é válida e a semântica corresponde exatamente ao que o enunciado pede.
Gabarito: CERTO (letra C).
Link permanente: /questoes/qg599040