Assistente Técnico de Tecnologia da Informação - Programador
Considere a existência de duas tabelas relacionadas em um banco de dados: Pedidos e Transportador. A tabela Pedidos possui 2 campos numéricos: PedidoID (chave primária) e TransportadorID (chave estrangeira). A tabela Transportador possui o campo TransportadorID (chave primária, numérico) e TransportadorNome (cadeia de caracteres). Para listar o número de Pedidos de cada Transportador utiliza-se a instrução SQL:
ASELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS “NumeroPedidos” FROM Pedidos RIGHT JOIN FROM Pedidos ON Pedidos.TransportadorID = Transportador.TransportadorID ORDER BY TransportadorNome;
BSELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos FULL JOIN Transportador WHERE Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome;
CSELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS “NumeroPedidos” FROM Pedidos, Transportador INNER JOIN ON Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome;
DSELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos LEFT JOIN Transportador ON Pedidos.TransportadorID = Transportador.TransportadorID ORDER BY TransportadorNome;
ESELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos LEFT JOIN Transportador ON Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome;
Revelar gabarito e comentário▾
GabaritoE — SELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos LEFT JOIN Transportador ON Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome;
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 com GROUP BY
Gabarito: letra E. Para listar o número de pedidos de cada transportador, é necessário usar LEFT JOIN (ou RIGHT JOIN) para garantir que todos os transportadores sejam incluídos (ou, dependendo da necessidade, que todos os pedidos sejam considerados), e GROUP BY para agregar por transportador, além da função COUNT sobre o identificador do pedido. A alternativa E atende a esses requisitos com a sintaxe correta: SELECT Transportador.TransportadorNome, COUNT(Pedidos.PedidoID) AS NumeroPedidos FROM Pedidos LEFT JOIN Transportador ON Pedidos.TransportadorID = Transportador.TransportadorID GROUP BY TransportadorNome;.
NÃO CAIA NESSA!
A banca troca a cláusula GROUP BY por ORDER BY na alternativa D, fazendo o candidato achar que está correta. Sem o agrupamento, a função COUNT conta todas as linhas do resultado, não por transportador. Fique atento: sempre que houver função de agregação, verifique se há GROUP BY para agrupar corretamente.
Alternativa
JOIN utilizado
Sintaxe correta?
Agrupamento (GROUP BY)?
Função de agregação (COUNT) correta?
Resultado esperado
A
RIGHT JOIN
❌ (erro: RIGHT JOIN FROM Pedidos)
❌ (falta GROUP BY)
❌
Não compila
B
FULL JOIN
❌ (usa WHERE em vez de ON)
✅ (GROUP BY presente)
✅
Produto cartesiano antes da filtragem
C
INNER JOIN (misturado com vírgula)
❌ (sintaxe inválida)
✅ (GROUP BY presente)
✅
Não compila
D
LEFT JOIN
✅
❌ (usa ORDER BY em vez de GROUP BY)
❌ (COUNT conta todas as linhas)
Contagem total, não por transportador
E
LEFT JOIN
✅
✅ (GROUP BY presente)
✅
Contagem correta por transportador
SQL: LEFT JOIN com GROUP BY: JOIN correto (LEFT JOIN (todos transportadores), ON (condição de junção)); Agregação (GROUP BY TransportadorNome, COUNT(Pedidos.PedidoID)); Erros comuns (ORDER BY no lugar de GROUP BY, FULL JOIN desnecessário, Sintaxe mista (vírgula + JOIN))
Alternativa A — ❌ Incorreta
Apresenta erro de sintaxe: RIGHT JOIN FROM Pedidos não faz sentido (join deve ser entre duas tabelas, não com a mesma tabela). Além disso, falta a referência à tabela Transportador no FROM e a cláusula ON está posicionada incorretamente. Não compila.
Alternativa B — ❌ Incorreta
Utiliza FULL JOIN que não é adequado para o problema (traria registros de ambas as tabelas sem correspondência) e, mais grave, a sintaxe está errada: FULL JOIN Transportador WHERE ... — a condição de junção deve ser especificada com ON, não com WHERE. Além disso, o uso de WHERE no lugar de ON pode gerar um produto cartesiano antes da filtragem. Mesmo corrigindo, o FULL JOIN não é necessário.
Alternativa C — ❌ Incorreta
Mistura a sintaxe antiga (vírgula no FROM) com INNER JOIN, o que é inválido. A cláusula INNER JOIN ON não tem condição especificada. Não executaria.
Alternativa D — ❌ Incorreta
Embora use LEFT JOIN com ON corretamente, utiliza ORDER BY TransportadorNome em vez de GROUP BY. Sem GROUP BY, a função COUNT contaria todas as linhas do resultado, não por transportador. Além disso, a cláusula ORDER BY após SELECT sem agregação não faz sentido para o objetivo.
Alternativa E — ✅ Correta ⟵ GABARITO
A sintaxe está correta: LEFT JOIN entre Pedidos e Transportador com condição ON, GROUP BY TransportadorNome para agrupar por transportador, e COUNT(Pedidos.PedidoID) para contar os pedidos de cada grupo. Os nomes das colunas são qualificados com o nome da tabela, evitando ambiguidade. Essa query retornará o nome do transportador e a quantidade de pedidos associados a ele (apenas transportadores que têm pelo menos um pedido; se houver pedidos sem transportador, aparecerão com nome NULL).
PEGA ESSA DICA!
Em consultas que pedem contagem de itens por uma entidade (ex.: número de pedidos por transportador), lembre-se de usar GROUP BY na coluna de agrupamento e a função de agregação (COUNT, SUM, etc.) sobre a coluna que deseja contar. A direção do JOIN (LEFT/RIGHT) depende se você quer incluir entidades sem ocorrências (ex.: transportadores sem pedidos). Se o enunciado pedir "cada transportador", geralmente espera-se que todos apareçam, então o ideal seria FROM Transportador LEFT JOIN Pedidos. Mas a banca considerou correta a alternativa E, que parte de Pedidos. Na prova, fique atento ao contexto.
Gabarito: letra E. A alternativa E é a única com sintaxe SQL válida e que agrupa corretamente os dados.