Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2024
Banco de Dados›SQL
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.
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.
CCerto
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)
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.