Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403640
Banca
CESPE / CEBRASPE
Órgão
TCE AC
Ano
2024
Cargo
ATI ( )

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.


Customers
CustomerID (INT) – identificador único do
cliente
CustomerName (VARCHAR) – nome do cliente

 

Orders
OrderID (INT) – identificador único do pedido
CustomerID (INT) – identificador do cliente que
fez o pedido
OrderDate (DATE) – data do pedido

 

SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;

 

Com base nessas informações, julgue o item subsequente.

 

A consulta retorna uma lista com o nome de todos os clientes e a data do pedido que eles fizeram, e mostra NULL na coluna data do pedido para os clientes que não possuem pedido.

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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 OUTER JOIN e valores NULL

Gabarito: Certo (C). A consulta com LEFT OUTER JOIN retorna todos os registros da tabela à esquerda (Customers) e, para os clientes sem pedido correspondente, preenche as colunas da tabela à direita (Orders) com NULL — exatamente o que a afirmação descreve. Essa é a semântica padrão do LEFT JOIN na linguagem SQL.

O LEFT OUTER JOIN (ou simplesmente LEFT JOIN) é um dos tipos de junção externa (outer join) da SQL. Ele preserva todas as linhas da tabela à esquerda da cláusula FROM, mesmo aquelas que não possuem correspondência na tabela à direita. Quando não há correspondência, as colunas da tabela da direita são preenchidas com o valor especial NULL. No comando apresentado, a tabela à esquerda é Customers e a tabela à direita é Orders. A condição de junção (ON Customers.CustomerID = Orders.CustomerID) relaciona cada cliente aos seus pedidos. Assim, para cada cliente que possui pedido, a consulta retorna uma linha com o nome do cliente e a data do pedido; para clientes sem nenhum pedido, retorna uma linha com o nome do cliente e NULL na coluna OrderDate. O resultado, portanto, lista todos os clientes, com ou sem pedido, e a coluna de data fica nula quando não há pedido.

A distinção crucial é entre LEFT JOIN e INNER JOIN. O INNER JOIN retorna apenas as linhas que possuem correspondência nas duas tabelas — clientes sem pedido simplesmente não aparecem no resultado. Já o LEFT JOIN garante que nenhum cliente seja omitido, exibindo NULL nos campos da tabela da direita quando não há correspondência. Essa é a diferença que a banca explora: a afirmação descreve corretamente o comportamento do LEFT JOIN, e não do INNER JOIN.

Na prática, imagine a tabela Customers com os clientes 'Ana' (ID 1) e 'Bruno' (ID 2), e a tabela Orders com um pedido do cliente 1 na data '2024-01-15'. O LEFT JOIN retornaria duas linhas: ('Ana', '2024-01-15') e ('Bruno', NULL). Se fosse um INNER JOIN, retornaria apenas ('Ana', '2024-01-15'). Portanto, a afirmação está correta.

NÃO CAIA NESSA!

A banca pode tentar confundir o candidato trocando LEFT JOIN por INNER JOIN. No INNER JOIN, clientes sem pedido não aparecem no resultado; no LEFT JOIN, eles aparecem com NULL na coluna de data. Fique atento ao tipo de junção usado no comando.

LEFT OUTER JOIN
  • 1Tabela à esquerda (Customers)
    • Todos os registros preservados
  • 2Tabela à direita (Orders)
    • Sem correspondência → NULL
    • Com correspondência → dados
  • 3Diferença para INNER JOIN
    • INNER: só correspondências
    • LEFT: inclui sem correspondência
LEVEL · soulevel.com.br

Item — ✅ CERTO

A afirmação descreve com precisão o comportamento do LEFT OUTER JOIN: retorna todos os clientes (tabela à esquerda) e, para aqueles sem pedido, exibe NULL na coluna OrderDate (tabela à direita). Isso está de acordo com a definição padrão de junção externa à esquerda na SQL.

Gabarito: Certo (C).

Link permanente: /questoes/ce403640