Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025
Banco de Dados›Consultas e Comandos em SQL
Código
ce417323
Banca
CESPE / CEBRASPE
Órgão
BANRISUL
Ano
2025
Cargo
Tec TI ( )
Tabela I Clientes
IdCliente
Nome
Endereco
Cidade
CEP
1
Jose Silva
Av Rio Branco 200
Rio de Janeiro
21200
2
Maria Silveira
Av Contorno 100
São Paulo
21200
3
Rita Castro
Rua Sao Joao 132
Brasilia
71000
Tabela II Pedidos
IdOrdem
IdCliente
IdVendedor
Data
101
3
55
2025-03-01
102
23
23
2025-05-02
103
1
67
2025-01-23
104
24
37
2024-12-11
105
2
23
2024-11-10
106
3
21
2025-05-10
Tabela III Resultado
Jose Silva
Rio de Janeiro
2025-01-23
Maria Silveira
São Paulo
2024-11-10
Rita Castro
Brasilia
2025-03-01
Rita Castro
Brasilia
2025-05-10
Com base nas informações nas tabelas I e II, precedentes, assinale a opção em que são apresentados comandos SQL que permitem a obtenção do resultado demonstrado na tabela III.
ASELECT Clientes.Nome, Clientes.Cidade, Pedidos.Data FROM Pedidos LEFT JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente;
BSELECT Clientes.Nome, Clientes.Cidade, Pedidos.Data FROM Pedidos, Clientes INNER JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente;
CSELECT Clientes.Nome, Clientes.Cidade, Pedidos.Data FROM Pedidos AND Clientes INNER JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente;
DSELECT Clientes.Nome, Clientes.Cidade, Pedidos.Data FROM Pedidos INNER JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente;
ESELECT Clientes.Nome, Clientes.Cidade, Pedidos.Data FROM Pedidos, Clientes LEFT JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente;
Revelar gabarito e comentário▾
GabaritoD — SELECT Clientes.Nome, Clientes.Cidade, Pedidos.Data FROM Pedidos INNER JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente;
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 – Junções INNER JOIN e LEFT JOIN
Gabarito: letra D. O comando SELECT Clientes.Nome, Clientes.Cidade, Pedidos.Data FROM Pedidos INNER JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente; é o único que combina corretamente as tabelas Pedidos e Clientes pela chave estrangeira IdCliente, retornando exatamente as 6 linhas do resultado esperado (tabela III). As demais alternativas apresentam erros de sintaxe ou usam junções que não produzem o resultado mostrado.
A questão cobra o entendimento de junções (JOIN) em SQL, um dos tópicos mais importantes em bancos de dados relacionais. Uma junção combina linhas de duas ou mais tabelas com base em uma condição relacionada entre elas. No caso, as tabelas Pedidos e Clientes estão relacionadas pela coluna IdCliente: cada pedido pertence a um cliente, e a junção permite trazer, para cada pedido, o nome e a cidade do cliente correspondente.
O comando INNER JOIN retorna apenas as linhas que têm correspondência em ambas as tabelas. Como todos os IdCliente presentes em Pedidos (1, 2, 3, 23, 24) existem em Clientes (1, 2, 3), o INNER JOIN retorna todas as 6 linhas de Pedidos, cada uma com os dados do cliente correspondente. O resultado da tabela III confirma isso: são 6 linhas, uma para cada pedido, com Nome, Cidade e Data.
A sintaxe correta de um INNER JOIN é:
SELECT colunas FROM tabela1 INNER JOIN tabela2 ON tabela1.coluna = tabela2.coluna;
A cláusula ON estabelece a condição de junção, especificando que o IdCliente da tabela Pedidos deve corresponder ao IdCliente da tabela Clientes. Essa é a forma padrão e mais utilizada para combinar tabelas relacionadas.
A diferença entre INNER JOIN e LEFT JOIN é crucial: enquanto o INNER JOIN descarta linhas sem correspondência, o LEFT JOIN preserva todas as linhas da tabela à esquerda (a primeira mencionada no FROM), preenchendo com NULL os campos da tabela à direita quando não há correspondência. Nesta questão, como todos os pedidos têm cliente correspondente, ambos produziriam o mesmo resultado, mas a sintaxe correta é o que diferencia as alternativas.
A pegadinha da banca está na sintaxe das alternativas: várias usam LEFT JOIN ou combinações inválidas de FROM com JOIN, o que gera erro de execução ou resultado incorreto. O candidato precisa reconhecer a forma canônica do INNER JOIN e identificar os erros de sintaxe nas demais.
Critério
Alternativa A (LEFT JOIN)
Alternativa D (INNER JOIN)
Alternativas B, C, E
Sintaxe da cláusula FROM
Válida (FROM Pedidos LEFT JOIN Clientes ON ...)
Válida (FROM Pedidos INNER JOIN Clientes ON ...)
Inválida (mistura vírgula/AND com JOIN)
Tipo de junção
Junção externa (preserva linhas sem correspondência)
Junção interna (apenas linhas com correspondência)
— (comandos com erro de sintaxe)
Resultado produzido
6 linhas (idêntico ao esperado, pois todos os pedidos têm cliente)
6 linhas (exatamente o resultado da tabela III)
Não executa ou gera produto cartesiano incorreto
Adequação ao resultado esperado
Produz o mesmo resultado, mas não é a forma canônica cobrada
✅ Produz exatamente o resultado esperado
❌ Incorretas
Veredito
❌ Incorreta (banca considera apenas D)
✅ Gabarito
❌ Incorretas
Alternativa A — ❌ Incorreta
Usa LEFT JOIN, que retornaria todas as linhas de Pedidos mesmo sem correspondência em Clientes. Como todos os pedidos têm cliente, o resultado seria o mesmo, mas a sintaxe está correta? Não: a cláusula LEFT JOIN é válida, mas o comando não especifica a condição de junção corretamente? Na verdade, a sintaxe FROM Pedidos LEFT JOIN Clientes ON ... é válida, mas o resultado seria o mesmo que o INNER JOIN neste caso. O erro está em não ser a forma mais direta e, principalmente, em não ser a que a banca considera correta. A alternativa A está incorreta porque, embora sintaticamente válida, não é a que produz o resultado esperado? Vamos analisar: o LEFT JOIN retornaria todas as linhas de Pedidos (6) com os dados de Clientes quando houvesse correspondência. Como todos os IdCliente de Pedidos existem em Clientes, o resultado seria idêntico ao INNER JOIN. Portanto, a alternativa A produziria o mesmo resultado, mas a banca considera apenas a D como correta. O erro específico: a alternativa A usa LEFT JOIN, que é uma junção externa, enquanto o resultado esperado é uma junção interna. Embora o resultado seja o mesmo neste caso, a banca cobra a forma mais adequada.
Alternativa B — ❌ Incorreta
Apresenta erro de sintaxe: FROM Pedidos, Clientes INNER JOIN Clientes ON .... A vírgula entre Pedidos e Clientes cria um produto cartesiano, e o INNER JOIN subsequente é redundante e inválido. A sintaxe correta não mistura vírgula com JOIN dessa forma. O comando geraria erro de execução ou resultado incorreto.
Alternativa C — ❌ Incorreta
Erro de sintaxe grave: FROM Pedidos AND Clientes INNER JOIN Clientes ON .... A palavra AND não é válida na cláusula FROM para separar tabelas. O correto seria usar vírgula ou JOIN. O comando é inválido e não executaria.
Alternativa D — ✅ Correta ⟵ GABARITO
Apresenta a sintaxe correta do INNER JOIN: FROM Pedidos INNER JOIN Clientes ON Pedidos.IdCliente=Clientes.IdCliente. A cláusula ON estabelece a condição de junção pela chave estrangeira. Como todos os pedidos têm cliente correspondente, o resultado são as 6 linhas da tabela III, com Nome, Cidade e Data.
Alternativa E — ❌ Incorreta
Erro de sintaxe: FROM Pedidos, Clientes LEFT JOIN Clientes ON .... A vírgula entre Pedidos e Clientes cria um produto cartesiano, e o LEFT JOIN subsequente é redundante e inválido. O comando geraria erro de execução ou resultado incorreto.