Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2025
- Código
- qa699136
- Banca
- Quadrix
- Órgão
- CRMV GO
- Ano
- 2025
- Cargo
- Ana Adm ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: CERTO (letra C). O comando apresentado está sintaticamente correto e semanticamente adequado: filtra veterinários ativos (ativo = 1), cujo CRMV termina com "1234" (crmv LIKE '%1234') e que possuam ao menos um atendimento em clínica localizada em Goiânia, por meio de uma subconsulta correlacionada com o operador EXISTS. A correlação é estabelecida pela condição a.id_vet = v.id_vet, que referencia a tabela externa VETERINARIO v dentro da subconsulta.
A subconsulta correlacionada é um dos conceitos mais cobrados em SQL e, ao mesmo tempo, um dos mais mal compreendidos. Diferentemente de uma subconsulta simples (não correlacionada), que é executada uma única vez e cujo resultado é usado pela consulta externa, a subconsulta correlacionada é executada para cada linha da consulta externa. Isso ocorre porque ela faz referência a uma coluna da tabela externa — no caso, v.id_vet — e, portanto, seu resultado depende da linha que está sendo avaliada no momento.
O operador EXISTS é um predicado lógico que retorna verdadeiro se a subconsulta retornar pelo menos uma linha. Ele não retorna dados; apenas testa a existência. No comando em questão, para cada veterinário ativo com CRMV terminando em "1234", o banco executa a subconsulta: se existir algum registro em ATENDIMENTO cujo id_vet seja igual ao id_vet do veterinário atual e cuja clínica associada (via INNER JOIN com CLINICA) esteja em Goiânia, o veterinário é incluído no resultado. Caso contrário, é excluído.
A cláusula LIKE '%1234' merece atenção especial. O caractere % é um curinga que corresponde a qualquer sequência de caracteres (inclusive vazia). Assim, '%1234' casa com qualquer valor de crmv que termine com "1234", independentemente do que vier antes. Isso atende exatamente ao requisito do enunciado: "CRMV termina com '1234'".
O INNER JOIN entre ATENDIMENTO e CLINICA é necessário porque a cidade da clínica não está na tabela ATENDIMENTO — ela está em CLINICA. O join conecta as duas tabelas pela chave id_clinica, permitindo filtrar por c.cidade = 'Goiânia'. A condição a.id_vet = v.id_vet dentro da subconsulta é o que a torna correlacionada, amarrando cada avaliação ao veterinário da consulta externa.
A pegadinha que a banca poderia explorar — e que não está presente aqui — seria trocar EXISTS por IN com uma subconsulta que retorna múltiplas colunas, ou usar NOT EXISTS sem necessidade. Outra armadilha comum seria afirmar que a subconsulta não é correlacionada, quando claramente é, pela referência v.id_vet. Nesta questão, todos os elementos estão corretos e a descrição do comando bate perfeitamente com o que ele faz.
A banca poderia ter trocado o operador EXISTS por IN ou invertido a correlação (por exemplo, v.id_vet = a.id_vet dentro da subconsulta, o que quebraria a lógica). Aqui, porém, a correlação está correta: a.id_vet = v.id_vet referencia a tabela externa VETERINARIO v, tornando a subconsulta genuinamente correlacionada. Fique atento a essa inversão em outras questões — é o erro clássico.
O comando está correto por três razões:
Filtro de veterinários ativos: WHERE ativo = 1 seleciona apenas os veterinários com o campo ativo igual a 1.
Filtro do CRMV: crmv LIKE '%1234' seleciona apenas os veterinários cujo número de CRMV termina com "1234".
Subconsulta correlacionada com EXISTS: a subconsulta verifica, para cada veterinário que passou nos filtros anteriores, se existe ao menos um atendimento (ATENDIMENTO a) cujo id_vet seja igual ao id_vet do veterinário externo (a.id_vet = v.id_vet) e cuja clínica (CLINICA c, via INNER JOIN) esteja em Goiânia (c.cidade = 'Goiânia').
A correlação é o ponto central: a condição a.id_vet = v.id_vet referencia a tabela VETERINARIO v da consulta externa, fazendo com que a subconsulta seja reavaliada para cada linha candidata. O EXISTS retorna verdadeiro se houver pelo menos um atendimento correspondente, incluindo o veterinário no resultado final.
Gabarito: letra C (CERTO).
Link permanente: /questoes/qa699136