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
qa698949
Banca
Quadrix
Órgão
CRM MS
Ano
2025
Cargo
Ana ( )
O Hospital Campo Grande está implementando um novo sistema de banco de dados para gerenciar informações sobre médicos, pacientes e atendimentos. O banco de dados apresenta as tabelas a seguir.   CREATE TABLE Medicos (        id_medico INT PRIMARY KEY,        nome VARCHAR(100),        especialidade VARCHAR(50),        salario DECIMAL(10,2) ); CREATE TABLE Pacientes (        id_paciente INT PRIMARY KEY,        nome VARCHAR(100),        data_nascimento DATE ); CREATE TABLE Atendimentos (        id_atendimento INT PRIMARY KEY,        id_medico INT,        id_paciente INT,       data_atendimento DATE,       descricao VARCHAR(100),       FOREIGN KEY (id_medico) REFERENCES Medicos(id_medico),       FOREIGN KEY (id_paciente) REFERENCES Pacientes(id_paciente) );   Com relação à situação hipotética apresentada e aos comandos SQL, julgue o item seguinte.   O seguinte comando retorna o nome dos médicos e a quantidade de atendimentos que cada um realizou, ordenando pela maior quantidade de atendimentos: SELECT M.nome, COUNT(A.id_atendimento) AS total_atendimentos FROM Medicos M LEFT JOIN Atendimentos A ON M.id_medico = A.id_medico GROUP BY M.nome ORDER BY COUNT(A.id_atendimento) DESC;;
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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

SQL: LEFT JOIN, COUNT e GROUP BY

Gabarito: CERTO (letra C). O comando apresentado está correto: ele retorna o nome de cada médico e a quantidade de atendimentos realizados, incluindo médicos sem atendimento (com contagem zero, graças ao LEFT JOIN), e ordena o resultado da maior para a menor quantidade de atendimentos (ORDER BY COUNT(...) DESC). A sintaxe está de acordo com o padrão SQL e com a maioria dos SGBDRs relacionais.

O comando SELECT é a instrução da linguagem SQL responsável por consultar dados. Ele combina várias cláusulas que definem o resultado: SELECT (colunas a exibir), FROM (tabela de origem), JOIN (combinação com outra tabela), GROUP BY (agrupamento de linhas para agregação) e ORDER BY (ordenação do resultado). Nesta questão, o objetivo é contar quantos atendimentos cada médico realizou, o que exige agrupar os registros por médico e usar a função de agregação COUNT.

O LEFT JOIN (ou LEFT OUTER JOIN) é o ponto central da questão. Ele retorna todas as linhas da tabela à esquerda (no caso, Medicos), mesmo que não haja correspondência na tabela à direita (Atendimentos). Quando não há correspondência, as colunas da tabela à direita ficam com valor NULL. Isso garante que médicos que ainda não realizaram nenhum atendimento também apareçam no resultado, com contagem zero. Se fosse usado um INNER JOIN, esses médicos seriam omitidos — uma diferença crucial que a banca explora.

A função COUNT(A.id_atendimento) conta apenas os valores não nulos da coluna id_atendimento. Como o LEFT JOIN preenche com NULL as colunas de Atendimentos para médicos sem atendimento, o COUNT retorna 0 para esses médicos — exatamente o comportamento desejado. Se a contagem fosse COUNT(*), ela contaria também as linhas com NULL, retornando 1 para médicos sem atendimento, o que seria um erro sutil.

O GROUP BY M.nome agrupa as linhas pelo nome do médico, permitindo que a função COUNT seja aplicada a cada grupo. Uma observação importante: em SQL padrão, quando se usa GROUP BY, todas as colunas não agregadas no SELECT devem aparecer no GROUP BY. Aqui, M.nome é a única coluna não agregada e está corretamente no GROUP BY. Se houvesse dois médicos com o mesmo nome, eles seriam agrupados juntos — uma limitação do comando, mas não um erro de sintaxe.

Por fim, o ORDER BY COUNT(A.id_atendimento) DESC ordena os grupos pela contagem em ordem decrescente, ou seja, do médico com mais atendimentos para o com menos. A palavra-chave DESC (de descending) é o que garante a ordem decrescente; sem ela, o padrão seria ASC (crescente). O comando está, portanto, completo e correto.

NÃO CAIA NESSA!

A banca pode tentar confundir o candidato trocando o LEFT JOIN por INNER JOIN. Com INNER JOIN, médicos sem atendimento seriam excluídos do resultado, o que mudaria o sentido da consulta. Outra pegadinha comum é usar COUNT(*) em vez de COUNT(A.id_atendimento), o que contaria linhas com NULL e retornaria 1 para médicos sem atendimento. Fique atento a essas trocas sutis.

  1. 1SELECT nome, COUNT(id_atendimento)
  2. 2FROM Medicos LEFT JOIN Atendimentos
  3. 3GROUP BY nome
  4. 4ORDER BY COUNT DESC
LEVEL · soulevel.com.br

Item — ✅ CERTO ⟵ GABARITO

O comando está correto por três razões principais:

  1. LEFT JOIN garante que todos os médicos apareçam, mesmo sem atendimentos, com contagem zero.

  2. COUNT(A.id_atendimento) conta apenas atendimentos efetivos (não nulos), produzindo o número correto por médico.

  3. ORDER BY COUNT(A.id_atendimento) DESC ordena do maior para o menor número de atendimentos, como pedido no enunciado.

A sintaxe é válida no padrão SQL e em SGBDRs como MySQL, PostgreSQL, SQL Server e Oracle. Não há erro de digitação, cláusula mal posicionada ou função incorreta. O comando atende exatamente ao que se propõe.

Gabarito: letra C (CERTO).

Link permanente: /questoes/qa698949