Capítulo 11: Junções Relacionais: INNER JOIN e LEFT JOIN
🎯 Objetivo da Aula
Nesta aula de alta maturidade em engenharia de dados, você aprenderá a técnica que justifica a existência dos bancos de dados relacionais: a Junção de Tabelas (Table Joins). No laboratório de informática, você aprenderá a reconectar as tabelas que normalizou nos capítulos anteriores sem produzir redundâncias de dados. Você dominará a sintaxe formal do INNER JOIN com a cláusula ON, compreenderá o papel estratégico do LEFT JOIN e aprenderá a regra sintática exclusiva do Microsoft Access para encadear múltiplas junções utilizando parênteses.
Ao final desta aula, você será capaz de gerar relatórios consolidados que unem clientes, veículos, motoristas e fretes em uma visão unificada, além de identificar com precisão caminhões da frota que estão parados no pátio gerando custo fixo sem faturar.
🏢 Cenário Prático (FastLog S.A.)
Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: O diretor de operações convocou uma reunião de emergência para reduzir custos: ele precisava de um relatório que exibisse em uma única tela o Código do Frete, a Razão Social do Cliente, o Modelo e a Placa do Caminhão, e o Nome do Motorista. No modelo antigo em Excel, esses dados ficavam em 4 planilhas separadas e o assistente passava o dia inteiro digitando dezenas de fórmulas PROCV lentas e propensas a erros #N/D. Pior ainda: a diretoria suspeitava que 15 caminhões novos comprados pela transportadora estavam esquecidos no pátio sem nenhuma viagem atribuída, gerando um prejuízo de depreciação de R$ 120.000,00 por mês.
Sua Missão: Como arquiteto de SQL, você criará a consulta oficial de despacho utilizando INNER JOIN para unificar as quatro tabelas em 0,02 segundo, e construirá uma consulta investigativa com LEFT JOIN para diagnosticar quais caminhões da frota estão 100% ociosos.
🧠 Fundamentos: A Teoria Traduzida
1. Diagramas de Venn: INNER JOIN vs. LEFT JOIN
A álgebra relacional baseia-se na teoria dos conjuntos:
flowchart TD
subgraph INNER["🟩 INNER JOIN (Interseção Exata)"]
direction LR
I1["Tabela A (Clientes)"] --- INTER["A ∩ B<br/>Apenas clientes que possuem fretes"] --- I2["Tabela B (Fretes)"]
end
subgraph LEFT["🟦 LEFT JOIN (Preservação da Esquerda)"]
direction LR
L1["Tabela A (Todos os Veículos)"] === L_ALL["A + (A ∩ B)<br/>Mostra TODOS os veículos, inclusive os SEM frete (NULL)"] --- L2["Tabela B (Fretes)"]
end
style INNER fill:#d4edda,stroke:#155724,stroke-width:2px
style LEFT fill:#d1ecf1,stroke:#0c5460,stroke-width:2pxINNER JOIN(Junção Interna): Retorna apenas as linhas que possuem correspondência exata em ambas as tabelas conectadas.- Se um cliente acabou de ser cadastrado e ainda não emitiu nenhuma ordem de frete, ele NÃO APARECE no resultado do
INNER JOIN.
- Se um cliente acabou de ser cadastrado e ainda não emitiu nenhuma ordem de frete, ele NÃO APARECE no resultado do
LEFT JOIN(Junção Externa à Esquerda): Retorna TODOS os registros da tabela da esquerda (FROM TabelaA), mesmo que não haja nenhum registro correspondente na tabela da direita (TabelaB).- Quando não há correspondência na tabela da direita, o Access preenche as colunas com o valor especial
NULL(vazio). - Aplicação Estratégica em Negócios: É a ferramenta perfeita para encontrar “o que está faltando” (clientes que não compram, frotas que não rodam, rotas que não têm demanda).
- Quando não há correspondência na tabela da direita, o Access preenche as colunas com o valor especial
2. A Cláusula de Ligação ON
A cláusula ON estabelece a ponte de igualdade matemática entre a Chave Primária (PK) e a Chave Estrangeira (FK):
3. A Peculiaridade de Sintaxe do Access (Parênteses Encadeados)
Em servidores como SQL Server ou PostgreSQL, podemos encadear múltiplos JOIN um após o outro de forma sequencial. No entanto, o motor relacional do Microsoft Access (Jet/ACE Engine) exige que cada junção adicional seja envolvida por parênteses ( ... ):
📖 Exemplo Guiado: Passo a Passo no Laboratório
Abra o arquivo FastLog_Database.accdb. Vamos construir a consulta unificada no Modo SQL.
Passo 1: Abrindo a Consulta em Modo SQL
- Acesse Criar ➔ Design da Consulta.
- Feche a janelinha Adicionar Tabelas.
- No canto superior esquerdo, clique no botão Modo SQL.
- Limpe o editor em branco.
🛠️ Prática Obrigatória 1: Relatório Unificado de Expedição com INNER JOIN Multi-Tabelas
Você unirá quatro tabelas em uma única instrução SQL: tbl_OrdensFrete, tbl_Clientes, tbl_Veiculos e tbl_Motoristas.
Passo a Passo no Computador:
- Digite cuidadosamente a consulta SQL com parênteses encadeados:
- Clique no botão
! Executar(exclamação vermelha). - Análise do Resultado:
- Observe que a tela exibe uma visão gerencial perfeita: não há nenhum código frio como
ID_ClienteouID_Motorista. - O nome da empresa cliente, a cidade, o modelo do caminhão, a placa e o nome do motorista aparecem reunidos lado a lado de forma instantânea!
- Observe que a tela exibe uma visão gerencial perfeita: não há nenhum código frio como
- Salve a consulta como:
qry_ExpedicaoGeralUnificada.
✅ Resultado Esperado (Prática 1):
A consulta substitui com perfeição dezenas de PROCVs do Excel, recuperando dados distribuídos em 4 tabelas relacionais em milissegundos com integridade total.
🛠️ Prática Obrigatória 2: Diagnóstico de Frota Ociosa com LEFT JOIN e IS NULL
Agora você assumirá o papel de auditor operacional, descobrindo quais caminhões da frota estão parados na garagem sem nenhuma viagem realizada.
Passo a Passo no Computador:
- Acesse Criar ➔ Design da Consulta ➔ Modo SQL.
- Digite a consulta investigativa com
LEFT JOIN: - Execute a consulta:
- Observe que caminhões que já viajaram mostram o número do frete na última coluna.
- Mas os caminhões que nunca viajaram exibem a coluna
ID_OrdemFretecompletamente EM BRANCO (NULL)!
- Volte ao Modo SQL e adicione a cláusula
WHEREpara filtrar com exclusividade os caminhões ociosos: - Execute a consulta.
- A tela exibirá apenas os caminhões parados! Salve a consulta com o nome:
qry_FrotaOciosaAuditoria.
✅ Resultado Esperado (Prática 2):
A consulta identifica com rigor cirúrgico os ativos logísticos ociosos, entregando à diretoria o relatório exato de veículos disponíveis para novas rotas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o banco de dados e feche o Access.
- Nomeie o arquivo:
FastLog_BD_Cap11_SeuNome_SeuSobrenome.accdb. - Acesse o Microsoft Teams na sua disciplina técnica.
- Abra a tarefa: “Banco de Dados - Cap 11: Junções INNER JOIN e LEFT JOIN”.
- Anexe o seu arquivo
.accdbe conclua o envio clicando em Entregar (Turn In).
💡 Checkpoint de Gestão & TI
Por que esta aula coloca você à frente no mercado? No ambiente corporativo, a maioria das pessoas sabe fazer consultas simples em uma única tabela. Mas saber cruzar múltiplas entidades com INNER JOIN e utilizar o poder investigativo do LEFT JOIN com IS NULL para descobrir clientes inativos, gargalos e equipamentos parados é a competência exata que os diretores buscam em analistas estratégicos.
🔥 Desafio de Fixação: Auditoria de Clientes Inativos
A diretoria comercial quer lançar uma campanha de reativação para clientes que estão cadastrados no sistema da FastLog mas que nunca contrataram nenhum frete.
Escreva uma consulta SQL no Access que atenda aos seguintes requisitos:
- Faça um
LEFT JOINentre a tabelatbl_Clientese a tabelatbl_OrdensFrete. - Projete os campos
ID_Cliente,Razao_Social,Cidade,UFeLimite_Credito. - Filtre exclusivamente os clientes que não possuem nenhuma ordem de frete vinculada (
WHERE tbl_OrdensFrete.ID_OrdemFrete IS NULL). - Ordene os clientes pelo
Limite_Creditoem ordem decrescente (DESC) para priorizar os clientes de maior potencial financeiro. - Salve com o nome:
qry_ClientesInativosCampanha.
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas reflexivas abaixo com base no conteúdo deste capítulo. Ao concluir, apresente o caderno ao professor para conferência e visto.
- O que é uma Junção de Tabelas (Table Join) e qual é a sua importância na arquitetura relacional?
- Explique o que acontece em um Produto Cartesiano quando esquecemos de definir a cláusula de ligação entre duas tabelas.
- Defina o comportamento do
INNER JOINcom base na teoria de conjuntos e diagramas de Venn. - Qual é a função da cláusula
ONem uma instrução de junção SQL? - Qual é a principal diferença de comportamento entre o
INNER JOINe oLEFT JOIN? - No Cenário Prático da FastLog, qual prejuízo a empresa sofria devido aos caminhões parados no pátio sem registro de viagens?
- Como a combinação de
LEFT JOINcom a cláusulaWHERE ... IS NULLpermite identificar frotas ociosas ou clientes inativos? - Qual é a regra de sintaxe obrigatória do motor do Microsoft Access quando encadeamos mais de duas tabelas em junções múltiplas?
- Na Prática Obrigatória 1, por que é recomendável utilizar a notação
NomeTabela.NomeCampo(comotbl_Clientes.Cidade) no comandoSELECT? - No Desafio de Fixação, qual é a justificativa de negócio para ordenar os clientes inativos pelo
Limite_Credito DESC?