Pular para o conteúdo principal

Álgebra relacional: a lógica por trás de toda consulta SQL

Um guia prático de álgebra relacional que cobre operadores fundamentais, tipos de join e operações derivadas — com comparações em SQL e exemplos que mostram como os mecanismos processam consultas por dentro.
Actualizado 17 de set. de 2026  · 11 min leer

Explore com IA

ChatGPTClaudePerplexity

Toda vez que você escreve um comando SELECT, o mecanismo do banco traduz isso em uma sequência de operações formais. Esse processo se baseia na álgebra relacional — a fundação matemática que define como os dados podem ser consultados e manipulados. É o que os mecanismos de banco usam para otimizar suas consultas e é o que aparece em entrevistas quando querem saber se você entende bancos além dos fundamentos.

A álgebra relacional dá um modelo mental de como as consultas funcionam em um nível mais profundo. Depois que você entende, SQL passa a fazer sentido lógico — e você começa a escrever consultas otimizadas.

Neste artigo, vou apresentar os conceitos centrais, os operadores fundamentais, as operações de join e como a álgebra relacional se conecta ao SQL que você escreve no dia a dia.

Obtenha uma das melhores certificações em SQL

Comprove suas habilidades básicas em SQL e avance em sua carreira de dados.
Obtenha a Certificação SQL

O que é álgebra relacional?

Álgebra relacional é uma linguagem de consulta procedural. Ela diz ao banco como recuperar os dados — não apenas o que você quer.

Essa é a grande diferença em relação ao SQL, que é declarativo. Quando você escreve uma consulta SQL, descreve o resultado desejado. A álgebra relacional descreve a sequência exata de operações para chegar lá.

Ela opera sobre relações — o termo formal para tabelas. Você fornece uma ou mais relações como entrada, aplica uma operação e recebe outra relação como saída.

Essa última parte é a propriedade de fechamento. Não importa qual operação você aplique — filtrar linhas, escolher colunas, combinar tabelas — o resultado é sempre outra relação. Isso importa porque permite encadear operações. A saída de uma vira a entrada da próxima, e você pode empilhar quantas precisar.

o que é álgebra relacional

Pense na álgebra relacional como blocos de montar. Cada bloco recebe uma tabela (ou duas), faz algo com ela e devolve uma tabela. Os mecanismos de banco usam esses blocos internamente para decompor e executar suas consultas SQL.

Conceitos fundamentais em álgebra relacional

Antes de usar os operadores da álgebra relacional, vale dominar o vocabulário. A boa notícia é que são só cinco termos.

  • Relação é simplesmente uma tabela. Tem linhas e colunas e representa um conjunto de dados sobre uma entidade específica — como funcionários ou departamentos. Na álgebra relacional, toda operação recebe uma ou mais relações como entrada e produz uma relação como saída.

  • Tupla é uma única linha dessa tabela. Se sua tabela Employees tem 10 linhas, ela tem 10 tuplas. Cada tupla representa um registro — neste caso, um funcionário.

  • Atributo é uma coluna. A tabela Employees pode ter atributos como employee_id, name e department_id. Os atributos definem que tipo de dado cada tupla contém.

  • Grau é o número de atributos de uma relação. Se Employees tem cinco colunas, seu grau é 5. Isso importa ao combinar relações — algumas operações exigem graus compatíveis.

  • Cardinalidade é o número de tuplas de uma relação. Se sua tabela Employees tem 200 linhas, sua cardinalidade é 200. A cardinalidade muda quando você adiciona ou remove linhas; o grau muda apenas quando você adiciona ou remove colunas.

Veja como esses termos mapeiam para o que você já conhece:

Álgebra relacional vs. termos comuns

Álgebra relacional versus termos do dia a dia

Deixe esses conceitos bem claros e os operadores vão fazer todo sentido.

Operações básicas de álgebra relacional em SGBD

Existem cinco operadores fundamentais na álgebra relacional. Todo o resto — joins, interseção, divisão — é construído em cima deles.

Para manter a consistência dos exemplos, vou usar duas tabelas nesta seção:

Employees

Tabela Employees

Tabela Employees

Departments

Tabela Departments

Tabela Departments

Seleção (σ)

Seleção filtra linhas com base em uma condição. É o equivalente, na álgebra relacional, à cláusula WHERE.

A notação é assim:

σ condition (Relation)

Digamos que você queira todos os funcionários com salário acima de 60.000:

σ salary > 60000 (Employees)

O resultado é uma nova relação apenas com as linhas que batem com a condição — Alice e Carol. A estrutura da tabela permanece a mesma; você só remove as linhas que não atendem ao critério.

Em SQL, seria assim:

SELECT * FROM Employees 
WHERE salary > 60000;

Projeção (π)

Projeção seleciona colunas específicas de uma relação e descarta o restante. É como enxugar a tabela para ficar só com os atributos que importam.

π attribute1, attribute2 (Relation)

Para obter apenas nomes e salários de todos os funcionários:

π name, salary (Employees)

Um detalhe importante: a projeção remove linhas duplicadas no resultado. Se duas tuplas forem idênticas após você descartar colunas, apenas uma cópia aparece na saída.

Em SQL, o equivalente é:

SELECT DISTINCT name, salary 
FROM Employees;

União (∪)

União combina duas relações em uma, mesclando todas as tuplas. As linhas duplicadas são removidas automaticamente.

A notação:

Relation1 ∪ Relation2

A condição é que ambas as relações sejam compatíveis para união. Ou seja, precisam ter o mesmo número de atributos e os tipos de dados correspondentes nas mesmas posições. Você não pode unir uma tabela de funcionários com uma de departamentos se os esquemas não batem.

Suponha que exista uma tabela Contractors com a mesma estrutura de Employees. A união traz todas as pessoas das duas tabelas, sem duplicatas:

Employees ∪ Contractors

Em SQL, fica assim:

SELECT * FROM Employees
UNION
SELECT * FROM Contractors;

Diferença de conjuntos (−)

Diferença retorna as tuplas que existem na primeira relação, mas não na segunda. Pense como subtração:

Relation1 − Relation2

Assim como na união, as duas relações precisam ser compatíveis para união.

Se você quiser todos os funcionários que não são contractors, a sintaxe é:

Employees − Contractors

O resultado contém apenas as linhas de Employees que não têm correspondência em Contractors.

Equivalente em SQL:

SELECT * FROM Employees
EXCEPT
SELECT * FROM Contractors;

Produto cartesiano (×)

Um produto cartesiano combina cada tupla da primeira relação com cada tupla da segunda. Se Employees tem 4 linhas e Departments tem 3, o resultado tem 4 × 3 = 12 linhas.

Employees × Departments

Sozinho, o resultado raramente é útil — você obtém todas as combinações possíveis de funcionários e departamentos, inclusive as que não fazem sentido. Mas o produto cartesiano é a base dos joins. Você o combina com uma seleção para manter só as linhas em que o relacionamento faz sentido.

Equivalente em SQL:

SELECT * FROM Employees, Departments;

Esses cinco operadores são a base. Todo o resto na álgebra relacional é atalho para combinações entre eles.

Operações de join na álgebra relacional

Joins são as operações mais usadas na álgebra relacional — e não são tão misteriosas quanto parecem.

Todo join é apenas um produto cartesiano seguido de uma seleção. Você combina todas as tuplas de duas relações e depois filtra as que não atendem à condição. Joins existem como atalho porque fazer primeiro um produto cartesiano completo é caro. O join aplica a condição durante a combinação, reduzindo o tamanho dos resultados intermediários.

Natural join (⋈)

Natural join junta automaticamente duas relações em todos os atributos com o mesmo nome e mantém só uma cópia dessas colunas compartilhadas no resultado:

Employees ⋈ Departments

Como as duas tabelas têm department_id, o natural join casa linhas em que esse valor é igual e as une. Alice (department_id = 10) casa com Engineering, Bob com Marketing e assim por diante.

Não há condição para escrever — o join infere a partir do esquema. É conveniente, mas renomear uma coluna pode quebrar sua consulta.

Equivalente em SQL:

SELECT * FROM Employees 
NATURAL JOIN Departments;

Theta join (⋈θ)

Theta join combina duas relações com qualquer condição que você definir — a condição pode usar qualquer operador de comparação: =, ≠, <, >, ≤, ≥.

Employees ⋈ salary > 60000 AND department_id = department_id Departments

Isso te dá controle total sobre a condição do join. A maioria dos joins que você escreve na prática é, por baixo dos panos, um theta join.

Equivalente em SQL:

SELECT * FROM Employees, Departments
WHERE Employees.salary > 60000
AND Employees.department_id = Departments.department_id;

Equi join

Equi join é um theta join em que a condição usa apenas igualdade (=). É o tipo mais comum.

Employees ⋈ Employees.department_id = Departments.department_id Departments

O resultado inclui todas as colunas das duas tabelas, o que significa que department_id aparece duas vezes. Essa é a principal diferença em relação ao natural join — equi join não remove colunas duplicadas.

Equivalente em SQL:

SELECT * FROM Employees
INNER JOIN Departments
ON Employees.department_id = Departments.department_id;

Outer join

Os joins acima retornam apenas linhas com correspondência em ambas as relações. Outer join mantém também as linhas sem correspondência, preenchendo com NULL os valores ausentes.

Há três variações:

  • Left outer join (⟕) mantém todas as linhas da relação da esquerda. Se uma linha de Employees não tiver departamento correspondente, ela ainda aparece no resultado com NULL nas colunas de departamento.

  • Right outer join (⟖) mantém todas as linhas da relação da direita. Departamentos sem funcionários ainda aparecem, com NULL nas colunas de funcionários.

  • Full outer join (⟗) mantém todas as linhas de ambas as relações. Linhas sem correspondência de qualquer lado aparecem com NULL nos valores ausentes.

Equivalentes em SQL:

-- Left outer join
SELECT * FROM Employees
LEFT JOIN Departments
ON Employees.department_id = Departments.department_id;

-- Right outer join
SELECT * FROM Employees
RIGHT JOIN Departments
ON Employees.department_id = Departments.department_id;

-- Full outer join
SELECT * FROM Employees
FULL OUTER JOIN Departments
ON Employees.department_id = Departments.department_id;

Use outer joins quando você não pode perder linhas sem correspondência — por exemplo, quando precisa da lista completa de funcionários, mesmo que o departamento não exista no sistema.

Operadores derivados da álgebra relacional

Operadores derivados são atalhos construídos a partir dos cinco operadores básicos vistos acima.

Interseção (∩)

Interseção retorna apenas as tuplas que aparecem em ambas as relações. Assim como união e diferença, as relações devem ser compatíveis para união.

Employees ∩ Contractors

Se uma pessoa é funcionária e também contractor, ela aparece no resultado. As demais são descartadas.

Por baixo dos panos, interseção é só diferença aplicada duas vezes:

Employees ∩ Contractors = Employees − (Employees − Contractors)

Equivalente em SQL:

SELECT * FROM Employees
INTERSECT
SELECT * FROM Contractors;

Divisão (÷)

Divisão é o operador que mais confunde estudantes de CS e juniores — mas o conceito é mais simples do que parece.

Divisão responde à pergunta: "quais tuplas na relação A estão associadas a todas as tuplas na relação B?"

Suponha uma tabela CourseEnrollments que registra quais alunos estão matriculados em quais cursos, e uma tabela RequiredCourses listando todos os cursos obrigatórios. A divisão retorna os alunos matriculados em todos os cursos obrigatórios.

CourseEnrollments ÷ RequiredCourses

O motivo de ser considerada complicada: não há equivalente direto em SQL. Para reproduzir divisão em SQL, você usa dupla negação — "encontre alunos para os quais não existe curso obrigatório que eles não tenham feito":

SELECT DISTINCT student_id FROM CourseEnrollments ce1
WHERE NOT EXISTS (
    SELECT course_id FROM RequiredCourses rc
    WHERE NOT EXISTS (
        SELECT * FROM CourseEnrollments ce2
        WHERE ce2.student_id = ce1.student_id
        AND ce2.course_id = rc.course_id
    )
);

Esse padrão com duplo NOT EXISTS é o jeito clássico de expressar divisão em SQL. Se em uma entrevista aparecer "encontre todos os X relacionados a todo Y", pense em divisão.

Renomear (ρ)

Renomear permite dar um novo nome a uma relação ou a seus atributos. Não muda os dados, só os rótulos.

ρ NewName (Relation)

Ou para renomear a relação e seus atributos:

ρ NewName(attr1, attr2, ...) (Relation)

Renomear é útil quando você precisa fazer um join de uma tabela com ela mesma — sem isso, os nomes de atributos colidiriam e a operação perderia o sentido. Também ajuda ao encadear operações, para dar nomes mais significativos a resultados intermediários.

Equivalente em SQL:

SELECT * FROM Employees AS E1;
-- ou renomeando colunas:
SELECT employee_id AS id, name AS employee_name FROM Employees;

Esses três operadores você precisa memorizar. Interseção e renomear são tranquilos; divisão é o que vale praticar antes de provas ou entrevistas.

Álgebra relacional vs. SQL

SQL e álgebra relacional não são a mesma coisa — mas SQL não existiria sem ela.

A diferença central está em como cada uma pensa as consultas. A álgebra relacional é procedural — você especifica a sequência exata de operações para obter o resultado. SQL é declarativo — você descreve o resultado desejado e o mecanismo do banco descobre como chegar lá.

Veja um exemplo simples. Em álgebra relacional, recuperar funcionários de Engineering fica assim:

π name, salary (σ department_id = 10 (Employees))

Você diz ao banco exatamente o que fazer: primeiro filtrar as linhas, depois escolher as colunas. A ordem das operações é explícita.

Em SQL, você escreve:

SELECT name, salary 
FROM Employees 
WHERE department_id = 10;

Você descreve o resultado que quer. O mecanismo do banco traduz isso em uma sequência de operações — e essas operações internas são construídas sobre a álgebra relacional.

Essa é a relação entre as duas. SQL é a linguagem voltada ao usuário; a álgebra relacional é o modelo teórico por baixo. Quando um banco recebe uma consulta SQL, ele a parseia em uma representação interna baseada em álgebra relacional, otimiza e executa.

SQL também vai além do que a álgebra relacional define. A álgebra relacional não tem conceito de:

  • Agregação — SUM(), COUNT(), AVG()

  • Agrupamento — GROUP BY

  • Ordenação — ORDER BY

  • Tratamento de duplicatas — álgebra relacional trabalha com conjuntos (sem duplicatas); SQL trabalha com multisets (duplicatas permitidas por padrão)

Esses recursos foram adicionados ao SQL porque o mundo real precisa deles. Mas todos se apoiam na base da álgebra relacional.

Em resumo, entender álgebra relacional mostra como suas consultas SQL são estruturadas e transformadas internamente. Isso não muda seu SQL do dia a dia, mas muda como você raciocina sobre o que suas consultas realmente fazem.

Erros e confusões comuns

A maioria das confusões com álgebra relacional vem de alguns mal-entendidos recorrentes. Vamos a eles.

  • Tratar SQL e álgebra relacional como a mesma coisa. Não são. SQL é inspirado na álgebra relacional, mas não são intercambiáveis. SQL é declarativo e inclui recursos como agregação e ordenação que a álgebra relacional não define. A álgebra relacional é um modelo formal; SQL é uma linguagem prática construída sobre ele.

  • Esquecer os requisitos de compatibilidade de esquema. União, interseção e diferença exigem relações compatíveis para união — mesmo número de atributos e mesmos tipos na mesma ordem. Tentar aplicar esses operadores a tabelas com esquemas diferentes não funciona. Isso confunde porque joins não têm essa exigência.

  • Não entender o operador divisão. Divisão é o único operador sem equivalente direto em SQL, por isso derruba muita gente. Se aparecer "encontre todos os X associados a todo Y", isso é divisão. A tradução em SQL usa o padrão com duplo NOT EXISTS — não é óbvio, então vale praticar antes de prova ou entrevista.

  • Achar que joins são operadores primitivos. Não são. Todo join é um produto cartesiano combinado com uma seleção. Natural join, theta join, equi join — todos são atalhos dessa combinação. Entender isso facilita prever o comportamento quando os resultados surpreendem.

Conclusão

A álgebra relacional é a espinha dorsal teórica de todo sistema de banco de dados relacional. Toda consulta que você escreve em SQL é traduzida em uma sequência de operações de álgebra relacional antes de o mecanismo tocar em uma única linha.

Os operadores — seleção, projeção, união, diferença de conjuntos, produto cartesiano e seus derivados — são os blocos dessa tradução. Quando você entende como funcionam e como se encadeiam, para de ver SQL como uma caixa-preta e passa a enxergar a estrutura por baixo.

Esse é o valor real de aprender álgebra relacional: entender o que suas consultas realmente fazem — não escrever tudo em notação formal.

Torne-se certificado em SQL

Comprove que suas habilidades em SQL estão prontas para o trabalho com uma certificação.

Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Cientista de dados sênior baseado na Croácia. Principal redator técnico com mais de 700 artigos publicados, gerando mais de 10 milhões de visualizações. Autor do livro Automação do aprendizado de máquina com TPOT.

FAQs sobre álgebra relacional

O que é álgebra relacional em SGBD?

Álgebra relacional é uma linguagem formal de consultas que define como os dados podem ser recuperados e manipulados em um banco de dados relacional. Ela opera sobre relações (tabelas) e produz uma nova relação como saída para cada operação. Os mecanismos de banco a utilizam internamente para decompor e executar consultas SQL.

Quais são os operadores básicos na álgebra relacional?

Os cinco operadores fundamentais são seleção (σ), projeção (π), união (∪), diferença de conjuntos (−) e produto cartesiano (×). Seleção filtra linhas, projeção escolhe colunas, união combina duas relações compatíveis, diferença subtrai tuplas e o produto cartesiano combina todas as tuplas de duas relações. Todos os demais — joins, interseção, divisão — são derivados desses cinco.

Qual é a diferença entre álgebra relacional e SQL?

Álgebra relacional é procedural — ela especifica a sequência exata de operações para recuperar dados. SQL é declarativo — você descreve o resultado desejado e o mecanismo do banco descobre como obtê-lo. SQL se baseia em conceitos da álgebra relacional, mas também inclui recursos como agregação, agrupamento e ordenação que a álgebra relacional não define.

O que é o operador divisão na álgebra relacional?

Divisão responde à pergunta "quais tuplas na relação A estão associadas a todas as tuplas na relação B?" Ela é usada quando você precisa encontrar registros que correspondam a toda entrada em outra relação — como alunos matriculados em todos os cursos obrigatórios. Não há equivalente direto em SQL; você reproduz usando o padrão com duplo NOT EXISTS.

Qual é a diferença entre natural join e equi join na álgebra relacional?

Ambos os tipos de join casam linhas usando condições de igualdade, mas tratam colunas duplicadas de forma diferente. Natural join junta automaticamente em todos os nomes de atributos compartilhados e remove as colunas duplicadas no resultado. Equi join exige uma condição explícita e mantém as duas cópias das colunas de junção na saída.

Temas
SQL

Aprenda com a DataCamp

{count, plural, one {Curso} other {Cursos}}

Introdução aos bancos de dados relacionais em SQL

{hours} h
200.7K
Saiba como criar uma das formas mais eficientes de armazenamento de dados: os bancos de dados relacionais!
Ver detalhesRight Arrow
Começar Curso
Ver maisRight Arrow
Relacionado
SQL Programming Language

{count, plural, one {blog} other {blogs}}

O que é SQL? - A linguagem essencial para o gerenciamento de bancos de dados

Saiba tudo sobre o SQL e por que ele é a linguagem de consulta ideal para o gerenciamento de bancos de dados relacionais.
Summer Worsley's photo

Summer Worsley

13 min

{count, plural, one {blog} other {blogs}}

O que é um banco de dados gráfico? Um guia para iniciantes

Explore o intrincado mundo dos bancos de dados gráficos com nosso guia para iniciantes. Entenda as relações entre os dados, aprofunde-se na comparação entre bancos de dados relacionais e gráficos e explore casos de uso práticos.
Kurtis Pykes 's photo

Kurtis Pykes

11 min

{count, plural, one {Tutorial} other {Tutoriais}}

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

15 min

{count, plural, one {Tutorial} other {Tutoriais}}

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

SQLAlchemy_Tutorial.

{count, plural, one {Tutorial} other {Tutoriais}}

Tutorial de SQLAlchemy com exemplos

Aprenda a acessar e executar consultas SQL em todos os tipos de bancos de dados relacionais usando objetos Python.
Abid Ali Awan's photo

Abid Ali Awan

13 min

{count, plural, one {Tutorial} other {Tutoriais}}

Introdução aos acionadores SQL: Um guia para desenvolvedores

Saiba como usar os acionadores SQL para automatizar tarefas, manter a integridade dos dados e melhorar o desempenho do banco de dados. Experimente exemplos práticos como os comandos CREATE, ALTER e DROP no MySQL e no Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

13 min

Ver MaisVer Mais