Pular para o conteúdo principal

Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2025

Banco de DadosSQL
Código
ce195208
Banca
CESPE / CEBRASPE
Órgão
BANRISUL
Ano
2025
Nível
Superior
Cargo
Técnico em Tecnologia da Informação II - Desenvolvimento de Software
Imagem associada para resolução da questãoCom 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.
  1. ASELECT Clientes.Nome, Clientes.Cidade,Pedidos.DataFROM Pedidos LEFT JOIN Clientes ONPedidos.IdCliente=Clientes.IdCliente;
  2. BSELECT Clientes.Nome, Clientes.Cidade,Pedidos.DataFROM Pedidos, ClientesINNER JOIN Clientes ONPedidos.IdCliente=Clientes.IdCliente;
  3. CSELECT Clientes.Nome, Clientes.Cidade,Pedidos.DataFROM Pedidos AND ClientesINNER JOIN Clientes ONPedidos.IdCliente=Clientes.IdCliente;
  4. DSELECT Clientes.Nome, Clientes.Cidade,Pedidos.DataFROM PedidosINNER JOIN Clientes ONPedidos.IdCliente=Clientes.IdCliente;
  5. ESELECT Clientes.Nome, Clientes.Cidade,Pedidos.DataFROM Pedidos, ClientesLEFT JOIN Clientes ONPedidos.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 (JOIN) e sintaxe de consulta

Gabarito: letra D. A consulta correta usa INNER JOIN com a condição de junção na cláusula ON, associando Pedidos.IdCliente a Clientes.IdCliente — é a única alternativa com sintaxe válida e que produz o resultado esperado (apenas os pedidos que possuem cliente correspondente). As demais alternativas contêm erros de sintaxe ou usam LEFT JOIN de forma incorreta.

O comando SELECT é a instrução fundamental da linguagem SQL para recuperar dados de um banco de dados relacional. Quando precisamos combinar dados de duas ou mais tabelas, utilizamos as junções (JOIN). A sintaxe básica de uma junção é:

SELECT colunas FROM tabela1 JOIN tabela2 ON tabela1.coluna = tabela2.coluna;

A cláusula ON estabelece a condição de junção, especificando quais colunas devem corresponder entre as tabelas. No caso da questão, a condição é Pedidos.IdCliente = Clientes.IdCliente, ou seja, para cada pedido, buscamos o cliente cujo IdCliente seja igual ao IdCliente do pedido.

Existem vários tipos de junção em SQL. O INNER JOIN retorna apenas os registros que possuem correspondência em ambas as tabelas — ou seja, pedidos que têm um cliente associado. Já o LEFT JOIN (ou LEFT OUTER JOIN) retorna todos os registros da tabela à esquerda (a primeira mencionada no FROM), mesmo que não haja correspondência na tabela à direita; nesses casos, as colunas da tabela à direita ficam com valor NULL. O RIGHT JOIN é o inverso, e o FULL OUTER JOIN retorna todos os registros de ambas as tabelas.

A pegadinha desta questão está na sintaxe: várias alternativas misturam a sintaxe antiga de junção implícita (vírgula no FROM) com a sintaxe moderna (JOIN ... ON), o que é inválido. A alternativa correta usa apenas a sintaxe moderna, com INNER JOIN e a condição na cláusula ON.

NÃO CAIA NESSA!

A banca mistura a sintaxe de junção implícita (vírgula no FROM) com a sintaxe explícita (JOIN ... ON) nas alternativas B e E, criando comandos inválidos. O candidato que conhece apenas uma das sintaxes pode não perceber o erro. Lembre-se: a sintaxe correta usa FROM tabela1 JOIN tabela2 ON condição, sem vírgula.

1INNER JOIN
Só registros com correspondência
Sintaxe: FROM t1 JOIN t2 ON condição
2LEFT JOIN
Todos da tabela esquerda
Sem correspondência → NULL
3RIGHT JOIN
Todos da tabela direita
4FULL OUTER JOIN
Todos de ambas
5Sintaxe inválida
Vírgula no FROM + JOIN explícito
AND no FROM
Junções SQL
LEVELsoulevel.com.br
Junções SQL: INNER JOIN (Só registros com correspondência, Sintaxe: FROM t1 JOIN t2 ON condição); LEFT JOIN (Todos da tabela esquerda, Sem correspondência → NULL); RIGHT JOIN (Todos da tabela direita); FULL OUTER JOIN (Todos de ambas); Sintaxe inválida (Vírgula no FROM + JOIN explícito, AND no FROM)

Alternativa A — ❌ Incorreta

Usa LEFT JOIN, que retornaria todos os pedidos, inclusive aqueles sem cliente correspondente (com NULL nas colunas de Clientes). Se o resultado esperado (tabela III) não inclui pedidos sem cliente, o LEFT JOIN produziria linhas extras. Além disso, a ordem das tabelas no LEFT JOIN (Pedidos LEFT JOIN Clientes) preservaria todos os pedidos, o que não corresponde ao resultado demonstrado.

Alternativa B — ❌ Incorreta

Apresenta sintaxe inválida: mistura a junção implícita (FROM Pedidos, Clientes) com a junção explícita (INNER JOIN Clientes ON ...). A cláusula FROM não pode conter vírgula quando se usa JOIN explícito. O comando geraria erro de sintaxe.

Alternativa C — ❌ Incorreta

Usa FROM Pedidos AND Clientes, o que é totalmente inválido — AND não é um operador válido na cláusula FROM. A sintaxe correta exige vírgula (junção implícita) ou JOIN explícito. O comando geraria erro de sintaxe.

Alternativa D — ✅ Correta ⟵ GABARITO

Usa a sintaxe correta de INNER JOIN: FROM Pedidos INNER JOIN Clientes ON Pedidos.IdCliente = Clientes.IdCliente. Essa junção retorna apenas os pedidos que possuem um cliente correspondente, com as colunas Nome, Cidade (de Clientes) e Data (de Pedidos), exatamente como demonstrado na tabela III.

Alternativa E — ❌ Incorreta

Apresenta sintaxe inválida: mistura a junção implícita (FROM Pedidos, Clientes) com a junção explícita (LEFT JOIN Clientes ON ...). A cláusula FROM não pode conter vírgula quando se usa JOIN explícito. O comando geraria erro de sintaxe.

Gabarito: letra D — a única alternativa com sintaxe SQL válida e que produz o resultado esperado.

Link permanente: /questoes/ce195208