13
Banco de Dados

Além da Intersecção

Praticar Agora
OUTER JOIN & UNION • Guia Interativo

Dominando a arte de combinar, resgatar e empilhar dados.

O INNER JOIN só retorna quem tem par exato. Hoje aprenderemos a resgatar dados "órfãos" usando LEFT JOIN, mapear falhas com IS NULL e alterar o eixo com UNION.

1–32
Mapa da Aula 13 SGBD SQL
01. INNER JOIN vs LEFT JOIN Resgate
02. WHERE ... IS NULL BI & Audit
03. UNION & UNION ALL Empilhamento
Exemplo Didático Orientado

A Jornada do Relatório: Passo a Passo com Analogias Visuais

Cenário: Uma loja precisa entender como cruzar a tabela de Clientes com a de Pedidos sem ignorar cadastros ou perder informações.

1

O Ponto Cego do INNER JOIN

O INNER JOIN exige perfeição matemática. Ele retorna apenas a intersecção exata. Se um cliente se cadastrou hoje e ainda não comprou nada, ele é silenciosamente ignorado pelo relatório.

// Retorna apenas clientes QUE POSSUEM pedidos
SELECT c.nome, p.id_pedido, p.valor
FROM clientes c
INNER JOIN pedidos p ON c.id = p.cliente_id;
⚠ Resultado Prático: Clientes recém-cadastrados somem da lista. O Marketing não consegue enviar cupom para clientes inativos!
Analogia 01: Intersecção Fechada
Clientes Pedidos INNER Apenas quem tem par nos 2 lados
2

LEFT JOIN: A Tabela Âncora

O LEFT JOIN transforma a primeira tabela (à esquerda) na nossa ÂNCORA. Preserva-se 100% dos seus registros. Onde a tabela da direita não encontrar correspondência, o banco preenche com [NULL].

// Clientes é a Âncora (Esquerda). Trará TODOS os clientes!
SELECT c.nome, p.id_pedido, p.valor
FROM clientes c -- Âncora
LEFT JOIN pedidos p ON c.id = p.cliente_id;
💡 Regra de Ouro: Se o cliente "Ana" não comprou nada, seu nome aparecerá e a coluna id_pedido exibirá NULL.
Analogia 02: A Âncora e o Vazio
CLIENTES (Âncora) PEDIDOS NULL NULL
3

Caçadores de Órfãos (IS NULL)

Em Business Intelligence, um valor NULL não é um erro; é uma oportunidade estratégica! Quando combinamos LEFT JOIN com a condição WHERE tabela_direita.id IS NULL, isolamos exclusivamente quem NÃO possui correspondência.

// Retorna EXCLUSIVAMENTE os clientes que NUNCA compraram nada
SELECT c.nome, c.email
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
WHERE p.id_pedido IS NULL;
🎯 Aplicações Práticas: Descobrir produtos encalhados que nunca venderam, alunos sem presença, motoristas sem viagens ativas.
Analogia 03: Lupa de Auditoria BI
Cliente Pedido ID Carlos Silva #9021 Mariana Costa IS NULL João Pedro #9025 🔍
4

Eixo Vertical: UNION vs UNION ALL

Enquanto os JOINs conectam tabelas horizontalmente (adicionando colunas), o UNION empilha resultados no eixo vertical (adicionando linhas).

  • UNION: A Peneira. Avalia o conjunto inteiro e elimina duplicatas (mais lento).
  • UNION ALL: O Funil Rápido. Junta tudo sem conferir duplicatas (alta performance).
// Regra: Ambos os SELECTs devem ter MESMA QTD e TIPOS de colunas
SELECT nome, email, 'Cliente' AS tipo FROM clientes
UNION ALL
SELECT empresa_nome, email, 'Fornecedor' AS tipo FROM fornecedores;
⚡ Dica de Performance: Sempre dê preferência ao UNION ALL a menos que remover duplicatas seja um requisito estrito da regra de negócio.
Analogia 04: Peneira vs Funil
SELECT 1 (Clientes) SELECT 2 (Fornecedores) UNION / UNION ALL Linhas Query 1 Linhas Query 2
Laboratório Prático Individual

32 Exercícios Práticos Orientados

Cada card apresenta uma situação real de mercado. Localize o exercício pelo seu número de chamada.

Exercício 01 E-commerce

Clientes Sem Compras

O departamento de Marketing precisa de uma lista contendo o nome e email de todos os clientes cadastrados na tabela clientes que jamais realizaram nenhum pedido na tabela pedidos.

Esquema: clientes(id, nome, email)
pedidos(id, cliente_id, data)
Exercício 02 Hospital & Saúde

Médicos Sem Agenda

A direção do hospital quer identificar quais médicos da tabela medicos não possuem nenhuma consulta agendada na tabela consultas para readequação de plantão.

Esquema: medicos(id, nome, crm)
consultas(id, medico_id, data)
Exercício 03 Biblioteca

Acervo Intacto

Gere um relatório listando o título e o ISBN dos livros da tabela livros que jamais foram emprestados na tabela emprestimos.

Esquema: livros(id, titulo, isbn)
emprestimos(id, livro_id, data)
Exercício 04 EdTech

Alunos Não Iniciados

Encontre o nome e e-mail dos alunos matriculados na tabela alunos que ainda não concluíram nenhum módulo na tabela progresso.

Esquema: alunos(id, nome, email)
progresso(id, aluno_id, modulo_id)
Exercício 05 Streaming Música

Artistas Sem Tocadas

Consulte o nome dos artistas da tabela artistas que não registraram nenhuma execução na tabela de histórico reproducoes.

Esquema: artistas(id, nome_artistico)
reproducoes(id, artista_id, data)
Exercício 06 Oficina Mecânica

Veículos Sem Manutenção

Selecione a placa e o modelo dos veículos da tabela veiculos que não possuem nenhuma Ordem de Serviço cadastrada em ordens_servico.

Esquema: veiculos(id, placa, modelo)
ordens_servico(id, veiculo_id, valor)
Exercício 07 Imobiliária

Imóveis Sem Proposta

Liste o endereço e valor pedido dos imóveis de imoveis que ainda não receberam nenhuma oferta formal na tabela propostas.

Esquema: imoveis(id, endereco, valor)
propostas(id, imovel_id, valor_oferta)
Exercício 08 Academia Fitness

Alunos Ausentes

Consulte os alunos matriculados em alunos que não registraram nenhuma passagem na catraca na tabela frequencias.

Esquema: alunos(id, nome, matricula)
frequencias(id, aluno_id, data_hora)
Exercício 09 Restaurante

Pratos Sem Saída

Descubra os nomes dos pratos da tabela pratos que jamais foram vendidos e incluídos na tabela itens_pedido.

Esquema: pratos(id, nome, preco)
itens_pedido(id, prato_id, qtd)
Exercício 10 Pet Shop

Pets Sem Atendimento

Liste o nome do pet e espécie cadastrados em pets que nunca realizaram nenhuma consulta médica em consultas_vet.

Esquema: pets(id, nome, especie)
consultas_vet(id, pet_id, data)
Exercício 11 Cinema

Sessões Vazias

Consulte a sala e o horário das sessões programadas em sessoes para as quais não foi vendido nenhum bilhete na tabela ingressos.

Esquema: sessoes(id, sala, horario)
ingressos(id, sessao_id, poltrona)
Exercício 12 Supermercado

Produtos Sem Reposição

Liste a descrição dos produtos do catálogo produtos que não possuem nenhum registro de reposição na tabela entradas_estoque.

Esquema: produtos(id, descricao, ean)
entradas_estoque(id, produto_id, qtd)
Exercício 13 Logística

Motoristas Inativos

Consulte o nome e a CNH dos motoristas da frota motoristas que não foram atribuídos a nenhuma rota na tabela viagens.

Esquema: motoristas(id, nome, cnh)
viagens(id, motorista_id, destino)
Exercício 14 Plataforma Freelance

Projetos Sem Ofertas

Gere uma lista dos títulos dos projetos publicados na tabela projetos que ainda não receberam nenhuma candidatura na tabela propostas.

Esquema: projetos(id, titulo, orcamento)
propostas(id, projeto_id, valor)
Exercício 15 Locadora de Carros

Veículos Nunca Alugados

Consulte a placa e modelo dos automóveis da frota carros que jamais constaram em nenhum contrato da tabela locacoes.

Esquema: carros(id, placa, modelo)
locacoes(id, carro_id, data_inicio)
Exercício 16 Hotelaria

Quartos Vagos no Período

Mostre o número e andar dos quartos da categoria 'Luxo' em quartos que não tiveram nenhuma reserva registrada em reservas.

Esquema: quartos(id, numero, andar, tipo)
reservas(id, quarto_id, data_entrada)
Exercício 17 Recursos Humanos

Departamentos Desocupados

Exiba o nome dos setores da tabela departamentos que não possuem nenhum colaborador vinculado na tabela funcionarios.

Esquema: departamentos(id, nome_setor)
funcionarios(id, departamento_id, nome)
Exercício 18 Gestão de Eventos

Eventos Sem Vendas

Liste o nome e data dos shows agendados na tabela eventos que não contam com nenhum bilhete emitido em ingressos_evento.

Esquema: eventos(id, nome_evento, data)
ingressos_evento(id, evento_id, preco)
Exercício 19 Farmácia

Remédios Sem Prescrição

Selecione o nome comercial dos medicamentos de uso controlado em medicamentos que não registraram nenhuma venda em dispensacoes.

Esquema: medicamentos(id, nome_comercial)
dispensacoes(id, medicamento_id, receita)
Exercício 20 Companhia Aérea

Pilotos Fora de Escala

Consulte a matrícula e o nome dos pilotos cadastrados em pilotos que não foram escalados para nenhum voo na tabela escalas_voo.

Esquema: pilotos(id, nome, matricula)
escalas_voo(id, piloto_id, voo_codigo)
Exercício 21 Concessionária

Consolidação de Contatos (UNION)

Utilize o comando UNION para consolidar em uma única lista os nomes e telefones cadastrados tanto na tabela de clientes quanto na de fornecedores.

Esquema: clientes(nome, telefone)
fornecedores(nome_empresa, fone)
Exercício 22 Seguradora

Apólices Sem Sinistro

Selecione o número da apólice e titular da tabela apolices que não possuem nenhum sinistro comunicado na tabela sinistros.

Esquema: apolices(id, numero, titular)
sinistros(id, apolice_id, data_ocorrencia)
Exercício 23 Streaming de Filmes

Filmes Fora de Favoritos

Mostre o título dos filmes catalogados em filmes que não aparecem na lista de favoritos de nenhum usuário na tabela favoritos.

Esquema: filmes(id, titulo, ano)
favoritos(id, filme_id, usuario_id)
Exercício 24 Barbearia Premium

Clientes Inativos no Período

Identifique o nome e telefone dos clientes de clientes que não possuem agendamentos registrados na tabela agendamentos nos últimos 60 dias.

Esquema: clientes(id, nome, telefone)
agendamentos(id, cliente_id, data_agendada)
Exercício 25 Cervejaria Artesanal

Lotes Não Distribuídos

Consulte o código do lote e a data de fabricação em lotes_producao para os lotes que ainda não possuem ordem de envio em distribuicao.

Esquema: lotes_producao(id, codigo_lote, data_validade)
distribuicao(id, lote_id, destino)
Exercício 26 Torneio de E-sports

Times Sem Partidas Alocadas

Exiba o nome da equipe cadastrada em times que ainda não tem nenhum confronto agendado na tabela de tabela de jogos partidas.

Esquema: times(id, nome_time, tecnico)
partidas(id, time_casa_id, time_fora_id)
Exercício 27 Confeitaria

Encomendas Sem Confeiteiro

Liste o número do pedido e descrição do bolo na tabela encomendas para os quais nenhum confeiteiro foi atribuído na tabela confeiteiros.

Esquema: encomendas(id, descricao, data_entrega)
atribuicoes(id, encomenda_id, confeiteiro_id)
Exercício 28 Espaço Coworking

Salas Sem Reserva no Fim de Semana

Consulte o nome e capacidade das salas de reunião em salas que jamais registraram agendamento em fins de semana na tabela reservas_fds.

Esquema: salas(id, nome_sala, capacidade)
reservas_fds(id, sala_id, data)
Exercício 29 Parque Zoológico

Animais Sem Prontuário Exames

Selecione o apelido e o recinto dos animais em animais que não possuem nenhum laudo cadastrado na tabela de exames_veterinarios.

Esquema: animais(id, apelido, recinto)
exames_veterinarios(id, animal_id, resultado)
Exercício 30 Fintech & Banco Digital

Contas Digitais Inativas

Liste o número da conta e titular das contas digitais em contas que jamais efetuaram nenhuma transação financeira na tabela transacoes.

Esquema: contas(id, numero_conta, titular)
transacoes(id, conta_id, valor)
Exercício 31 Cafeteria Especial

Escalas Unificadas (UNION ALL)

Utilize o comando UNION ALL para empilhar em alta velocidade as listas das tabelas escala_manha e escala_noite (nome do barista e horário).

Esquema: escala_manha(barista, horario)
escala_noite(barista, horario)
Exercício 32 Livraria de Raros

Colecionadores Sem Lances

Descubra o nome e e-mail dos colecionadores cadastrados na tabela colecionadores que ainda não fizeram nenhum lance na tabela lances_leilao.

Esquema: colecionadores(id, nome, email)
lances_leilao(id, colecionador_id, valor)