Pular para o conteúdo principal

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

Banco de DadosSQL
Código
ce188253
Banca
CESPE / CEBRASPE
Órgão
TCE-AC
Ano
2024
Nível
Superior
Cargo
Analista de Tecnologia da Informação - Área: Gestão de Dados

        A seguir, são apresentadas as estruturas de duas tabelas, de nomes Customers e Orders, em um banco de dados, e também um comando SQL relativo a essas tabelas.


Imagem da questão

Com base nessas informações, julgue o item subsequente.A cláusula ON na consulta estabelece a condição para a junção das duas tabelas, especificando que o CustomerID da tabela Customers deve corresponder ao OrderID da tabela Orders.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

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

Cláusula ON em junções SQL

Gabarito: Errado. A afirmação está incorreta porque a cláusula ON estabelece a condição de junção entre as tabelas, mas a condição correta é que o CustomerID da tabela Customers deve corresponder ao CustomerID da tabela Orders — e não ao OrderID, como afirma o enunciado. A junção é feita pela chave estrangeira que relaciona as tabelas, que neste caso é o CustomerID.

A cláusula ON é um dos elementos centrais das junções (JOIN) em SQL. Ela define o predicado que determina quais linhas das duas tabelas serão combinadas no resultado. Em uma junção interna (INNER JOIN), apenas as linhas que satisfazem a condição especificada no ON são retornadas. A sintaxe básica é:

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

O que a cláusula ON faz é comparar valores de colunas entre as duas tabelas. A condição deve refletir o relacionamento lógico entre elas, normalmente uma chave primária de uma tabela sendo referenciada como chave estrangeira na outra. No caso apresentado, as tabelas Customers e Orders estão relacionadas pelo CustomerID: cada pedido (Order) pertence a um cliente (Customer). Portanto, a condição de junção correta seria Customers.CustomerID = Orders.CustomerID.

O erro do enunciado está em afirmar que o CustomerID da tabela Customers deve corresponder ao OrderID da tabela Orders. Isso mistura duas chaves diferentes: o CustomerID identifica o cliente, enquanto o OrderID identifica o pedido. Comparar essas duas colunas não faz sentido lógico, pois não representam a mesma entidade. A junção correta deve comparar colunas que representam o mesmo conceito — no caso, o CustomerID presente em ambas as tabelas.

Para entender melhor, considere um exemplo: se um cliente com CustomerID = 1 fez um pedido com OrderID = 100, a junção correta encontraria esse pedido comparando Customers.CustomerID (1) = Orders.CustomerID (1). Se comparássemos Customers.CustomerID (1) = Orders.OrderID (100), a condição seria falsa e o pedido não seria retornado — a junção não funcionaria como esperado.

A pegadinha desta questão é justamente a troca sutil de OrderID por CustomerID na condição de junção. O candidato que conhece a sintaxe do JOIN, mas não presta atenção aos nomes das colunas, pode marcar como certo. A banca explora a confusão entre as chaves das tabelas, testando se o candidato entende que a condição de junção deve ser baseada nas colunas que representam o relacionamento entre as entidades.

Guarde a regra: a cláusula ON sempre compara colunas que representam o mesmo conceito nas duas tabelas — normalmente a chave primária de uma e a chave estrangeira correspondente na outra. É exatamente nesse ponto que a questão se decide.

Aspecto

Afirmação do enunciado (incorreta)

Condição correta de junção

Colunas comparadas

Customers.CustomerID = Orders.OrderID

Customers.CustomerID = Orders.CustomerID

Conceito representado

CustomerID (identifica cliente) vs. OrderID (identifica pedido)

CustomerID em ambas (identifica o cliente)

Tipo de relacionamento

Nenhum — colunas de entidades diferentes

Chave primária (Customers) ↔ chave estrangeira (Orders)

Resultado da junção

Nenhuma linha retornada (condição sempre falsa)

Linhas corretas combinadas por cliente

Exemplo prático

CustomerID=1 ≠ OrderID=100 → pedido não retornado

CustomerID=1 = CustomerID=1 → pedido retornado

Alternativa E — ❌ Incorreta (gabarito)

A afirmação está errada porque especifica que o CustomerID da tabela Customers deve corresponder ao OrderID da tabela Orders. A condição de junção correta é entre CustomerID da tabela Customers e CustomerID da tabela Orders, pois é essa coluna que representa o relacionamento entre as duas tabelas. O OrderID é a chave primária da tabela Orders e não tem relação direta com o CustomerID da tabela Customers. A troca de CustomerID por OrderID na condição de junção torna a afirmação incorreta.

Gabarito: Errado

Link permanente: /questoes/ce188253