Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2025

Banco de DadosConsultas e Comandos em SQL
Código
qa699046
Banca
Quadrix
Órgão
CRM ES
Ano
2025
Cargo
ATI ( )

Situação hipotética para a questão.

   

No banco de dados do Conselho Regional de Medicina (CRM) de certo estado da federação, há as tabelas Medico, Especialidade, Medico_Especialidade e Pagamento. Essas tabelas estão descritas conforme os quadros a seguir.

   

Tabela Medico

id_medico

INT (PK)

nome

VARCHAR (100)

cpf

VARCHAR (11)

situacao

INT

numero_registro

VARCHAR(20)

data_registro

DATE
 

Tabela Especialidade

id_especialidadeINT
nomeVARCHAR (50)
codigo_cfm

VARCHAR (30)

   

Tabela Medico_Especialidade

id_medico_esp

INT (PK)

id_medico

INT (FK)

id_especialidadeINT (FK)
registro_especialVARCHAR (20)
   

Tabela Pagamento

id_pagamento

INT (PK)

id_medico

INT (FK)

data_vencimentoDATE
data_pagamentoDATE
valorDECIMAL (10, 2)
statusVARCHAR (20)
tipo

VARCHAR (30)

 

Na tabela Medico, o atributo situacao será do tipo inteiro e o número 0 corresponderá à situação em que o registro está “inativo”, 1, à situação em que o registro está “ativo”, e 2, à situação em que o registro está “suspenso”. Na tabela Especialidade, o atributo codigo_cfm corresponde ao código da especialidade no Conselho Federal de Medicina. Na tabela Medico_Especialidade, o atributo registro_especial corresponde ao número do registro de qualificação de especialista. Na tabela Pagamento, o atributo status pode receber os valores “pago”, “pendente” e “atrasado”, e o atributo tipo pode receber os valores “anuidade”, “multa” e “taxa de registro”.

 

Com base nessa situação hipotética, assinale a opção que apresenta a query que retorna a lista de médicos nefrologistas registrados antes de 2024 que tenham multas com status “pendente” ou “atrasado”.

  1. ASELECT m.nome FROM Medico m JOIN Medico_Especialidade me ON m.id_medico = me.id_medico JOIN Especialidade e ON me.id_especialidade = e.id_especialidade JOIN Pagamento p ON m.id_medico = p.id_medico WHERE e.nome = ‘Nefrologia’ AND m.data_registro >= ‘2023‑01‑01’ AND p.tipo = ‘multa’ AND p.status IN (‘pendente’, ‘atrasado’);
  2. BSELECT m.nome FROM Medico m JOIN Medico_Especialidade me ON m.id_medico = me.id_medico JOIN Especialidade e ON me.id_especialidade = e.id_especialidade JOIN Pagamento p ON m.id_medico = p.id_medico WHERE p.codigo_cfm = ‘Nefrologia’ AND m.data_registro < ‘2024‑01‑01’ AND p.tipo = ‘multa’ AND p.status IN (‘pendente’, ‘atrasado’);
  3. CSELECT m.nome FROM Medico m JOIN Medico_Especialidade me ON m.id_medico = me.id_medico JOIN Especialidade e ON me.id_especialidade = e.id_especialidade JOIN Pagamento p ON m.id_medico = p.id_medico WHERE e.nome = ‘Nefrologia’ AND m.data_registro <= ‘2023‑12‑31’ AND p.tipo = ‘multa’ AND p.status IN (‘pendente’, ‘atrasado’);
  4. DSELECT m.nome FROM Medico m JOIN Medico_Especialidade me ON m.id_medico = me.id_medico JOIN Especialidade e ON me.id_especialidade = e.id_especialidade JOIN Pagamento p ON m.id_medico = p.id_medico WHERE e.nome = ‘Nefrologia’ AND m.data_registro <= ‘2023‑12‑31’ AND p.status IN (‘pendente’, ‘atrasado’);
  5. ESELECT m.nome FROM Medico m JOIN Medico_Especialidade me ON m.id_medico = me.id_medico JOIN Especialidade e ON me.id_especialidade = e.id_especialidade JOIN Pagamento p ON m.id_medico = p.id_medico WHERE e.nome = ‘Nefrologia’ AND m.data_registro <= ‘2023‑12‑31’ AND p.tipo = ‘multa’ AND p.status = ‘pago’;
Revelar gabarito e comentário

GabaritoC — SELECT m.nome FROM Medico m JOIN Medico_Especialidade me ON m.id_medico = me.id_medico JOIN Especialidade e ON me.id_especialidade = e.id_especialidade JOIN Pagamento p ON m.id_medico = p.id_medico WHERE e.nome = ‘Nefrologia’ AND m.data_registro <= ‘2023‑12‑31’ AND p.tipo = ‘multa’ AND p.status IN (‘pendente’, ‘atrasado’);

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”.

Consultas SQL com múltiplas junções e filtros

Gabarito: letra C. A query correta deve unir as quatro tabelas (Medico, Medico_Especialidade, Especialidade e Pagamento), filtrar pela especialidade 'Nefrologia' (atributo nome da tabela Especialidade), por médicos registrados antes de 2024 (data_registro <= '2023-12-31'), por pagamentos do tipo 'multa' (p.tipo = 'multa') e com status 'pendente' ou 'atrasado' (p.status IN ('pendente', 'atrasado')). A alternativa C é a única que combina todos esses critérios corretamente.

Para construir uma consulta SQL que atenda a múltiplos critérios, é essencial entender o modelo de dados e como as tabelas se relacionam. Temos quatro tabelas: Medico (dados básicos do médico, incluindo data_registro), Especialidade (nome da especialidade), Medico_Especialidade (tabela de associação entre médico e especialidade) e Pagamento (registros de pagamentos de cada médico, com tipo e status). A pergunta pede médicos nefrologistas registrados antes de 2024 que tenham multas com status 'pendente' ou 'atrasado'. Isso exige juntar todas as tabelas para acessar as informações necessárias.

A junção é feita da seguinte forma: Medico se junta a Medico_Especialidade pela chave id_medico; Medico_Especialidade se junta a Especialidade pela chave id_especialidade; e Medico se junta a Pagamento pela chave id_medico. Isso garante que teremos acesso ao nome do médico, à especialidade, à data de registro e aos pagamentos. O filtro de especialidade deve ser feito no atributo nome da tabela Especialidade, pois é lá que está o nome 'Nefrologia'. O filtro de data deve considerar 'antes de 2024', ou seja, data_registro <= '2023-12-31' (ou < '2024-01-01', que é equivalente). O filtro de pagamento deve ser tipo = 'multa' e status IN ('pendente', 'atrasado').

A pegadinha desta questão está em dois pontos: primeiro, alguns candidatos podem confundir o atributo codigo_cfm da tabela Especialidade com o nome da especialidade, mas o codigo_cfm é um código, não o nome. Segundo, a condição de data pode ser escrita de duas formas equivalentes (<= '2023-12-31' ou < '2024-01-01'), mas a alternativa A usa >= '2023-01-01', que está incorreta. Além disso, a alternativa D esquece o filtro tipo = 'multa', e a alternativa E usa status = 'pago', que é o oposto do pedido.

Guarde o critério decisivo: a query correta deve filtrar por e.nome = 'Nefrologia', m.data_registro <= '2023-12-31', p.tipo = 'multa' e p.status IN ('pendente', 'atrasado'). É exatamente essa combinação que separa a alternativa correta das demais.

  1. 1Juntar as 4 tabelas
  2. 2Filtrar especialidade (e.nome)
  3. 3Filtrar data (<= 2023-12-31)
  4. 4Filtrar tipo = multa
  5. 5Filtrar status IN (pendente, atrasado)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

O erro está na condição de data: m.data_registro >= '2023-01-01' filtra médicos registrados a partir de 2023, mas o enunciado pede registrados antes de 2024. Isso incluiria médicos registrados em 2023, mas também excluiria os registrados antes de 2023, o que está errado. A condição correta seria m.data_registro <= '2023-12-31' (ou < '2024-01-01').

Alternativa B — ❌ Incorreta

O erro está no filtro de especialidade: p.codigo_cfm = 'Nefrologia' usa o atributo codigo_cfm da tabela Pagamento, que não existe. O codigo_cfm está na tabela Especialidade e é um código, não o nome da especialidade. O correto é filtrar e.nome = 'Nefrologia' na tabela Especialidade.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta alternativa combina todos os critérios corretamente: junta as quatro tabelas, filtra por e.nome = 'Nefrologia', m.data_registro <= '2023-12-31' (antes de 2024), p.tipo = 'multa' e p.status IN ('pendente', 'atrasado'). A condição de data <= '2023-12-31' é equivalente a < '2024-01-01', e o uso de IN com os dois status atende exatamente ao pedido.

Alternativa D — ❌ Incorreta

Falta o filtro p.tipo = 'multa'. Sem essa condição, a query retornaria médicos nefrologistas registrados antes de 2024 com qualquer tipo de pagamento (anuidade, multa ou taxa de registro) pendente ou atrasado, não apenas multas. O enunciado pede especificamente médicos que tenham multas com status 'pendente' ou 'atrasado'.

Alternativa E — ❌ Incorreta

O erro está no filtro de status: p.status = 'pago' é o oposto do pedido. O enunciado pede multas com status 'pendente' ou 'atrasado', não 'pago'. Além disso, a alternativa usa = em vez de IN, o que limitaria a apenas um status.

NÃO CAIA NESSA!

A banca explora duas confusões clássicas: (1) trocar o atributo nome da tabela Especialidade pelo codigo_cfm, que é um código e não o nome; (2) inverter a condição de data, usando >= '2023-01-01' em vez de <= '2023-12-31'. Fique atento a esses detalhes — com treino, você enxerga essas trocas de longe 💪.

PEGA ESSA DICA!

Para questões de SQL com múltiplos filtros, leia o enunciado e sublinhe cada condição: (1) qual tabela tem o atributo a filtrar, (2) qual operador de comparação usar (>=, <=, =, IN), (3) se há negação (como 'antes de' que vira <=). Depois, verifique cada alternativa contra essa lista, uma a uma.

Gabarito: letra C

Link permanente: /questoes/qa699046