No desenvolvimento e na engenharia de dados, nem sempre queremos (ou devemos) dar acesso direto às tabelas brutas do banco de dados. Às vezes, uma tabela é complexa demais, contém informações sensíveis ou exige JOINs exaustivos que os analistas precisam repetir todo dia.
Para resolver isso, utilizamos as Views (ou Visões).
O que é uma View?
Uma view (ou visão) é uma tabela virtual criada a partir de uma consulta SQL. Ela não armazena dados por si mesma, em vez disso, é uma “janela” que sempre exibe o resultado de uma query pré-definida, como se fosse uma tabela real.
Pense em uma view como um atalho salvo para uma consulta complexa. Quando você consulta uma view, o banco de dados executa a query por trás dela e retorna o resultado, como se você estivesse consultando uma tabela comum.
Veja como uma view se posiciona na arquitetura de um banco de dados:

Por que criar uma view?
1. Simplicidade e reutilização
Queries longas e com muitos JOINs podem ser encapsuladas em uma view e reutilizadas em vários lugares, sem repetição de código.
2. Segurança e controle de acesso
Views permitem expor apenas os dados que um usuário ou sistema pode ver, sem dar acesso direto às tabelas.
3. Abstração e manutenção
Se a estrutura do banco mudar, você atualiza apenas a view — as aplicações que a consomem não precisam saber o que mudou por baixo.
Como criar uma view: Exemplos práticos
Exemplo 1 — Criando uma view simples
-- Criando uma view simples
CREATE VIEW resumo_clientes AS
SELECT
c.id,
c.nome,
COUNT(p.id) AS total_pedidos,
SUM(p.valor) AS valor_total
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id
GROUP BY c.id, c.nome;
-- Consultando a view como se fosse uma tabela
SELECT * FROM resumo_clientes WHERE valor_total > 1000;Exemplo 2 — relatório de vendas por mês:
CREATE VIEW vendas_mensais AS
SELECT
DATE_TRUNC('month', data_pedido) AS mes,
COUNT(*) AS quantidade_pedidos,
SUM(total) AS receita_total,
AVG(total) AS ticket_medio
FROM pedidos
WHERE status = 'concluido'
GROUP BY DATE_TRUNC('month', data_pedido)
ORDER BY mes DESC;
-- Uso:
SELECT * FROM vendas_mensais WHERE mes >= '2024-01-01';Neste vídeo, falo sobre como criar uma View no phpMyAdmin para otimizar consultas no banco de dados de forma simples e eficiente:
Materialized Views: Quando performance importa
Views comuns executam a query toda vez que são consultadas. Para queries muito pesadas, existe o conceito de materialized view, que armazena fisicamente o resultado e pode ser atualizada periodicamente.
-- PostgreSQL: criando uma materialized view
CREATE MATERIALIZED VIEW estatisticas_diarias AS
SELECT
DATE(criado_em) AS dia,
COUNT(*) AS novos_usuarios,
SUM(receita) AS receita_do_dia
FROM eventos
GROUP BY DATE(criado_em);
-- Atualizando os dados armazenados
REFRESH MATERIALIZED VIEW estatisticas_diarias;É importante conhecer essa diferença, especialmente se você trabalha com grandes volumes de dados:
- View Comum: É apenas um “atalho”. Toda vez que você a chama, o banco executa o SELECT original. Se a tabela base mudar, a View reflete a mudança na hora.
- Materialized View (View Materializada): Muito comum em Data Warehouses (como Snowflake, Oracle ou Redshift). Ela salva o resultado da consulta fisicamente no disco.
- Vantagem: É infinitamente mais rápida para leitura em tabelas gigantes.
- Desvantagem: Os dados podem ficar desatualizados (é necessário dar um “refresh” manual ou agendado para atualizar os dados).
Qual é a diferença entre uma View, um Tabela e uma consulta AD-HOC?
- Tabelas: São estruturas físicas que armazenam dados diretamente no banco. Elas são a base de qualquer banco de dados relacional.
- Views: São consultas armazenadas que não armazenam dados por si mesmas, servindo como uma camada de abstração para facilitar o acesso a informações complexas.
- Consultas ADHOC: Uma consulta SQL que é executada de forma esporádica ou para responder a uma necessidade específica, sem estar previamente salva como uma view ou estrutura fixa.

💡 Quando usar uma View?
Se você deseja simplificar consultas, ocultar dados sensíveis ou organizar melhor as informações sem criar cópias dos dados.
💡 Quando usar uma Tabela?
Sempre que precisar armazenar dados de forma persistente e garantir que sejam acessados com alta performance.
💡 Quando usar uma Consulta ADHOC?
Sempre que precisar responder alguma pergunta temporária que não precisa ser consumida posteriormente
| Situação | Usar view? |
|---|---|
| Query complexa repetida em vários lugares | ✅ Sim |
| Controle de acesso a colunas sensíveis | ✅ Sim |
| Simplificar a interface para outras equipes | ✅ Sim |
| Query pesada consultada com muita frequência | ✅ Materialized view |
| Precisa inserir/atualizar dados diretamente | ⚠️ Com cuidado (views simples permitem, views com JOIN geralmente não) |
