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