VIEW (Vista) en SQL: qué es, cómo funciona y ejemplos prácticos

En SQL, una VIEW (vista) es una consulta almacenada en la base de datos que se comporta como una tabla virtual.
No contiene datos propios, sino que muestra el resultado de una consulta SELECT cada vez que se utiliza.

👉 Pensá en una vista como en una “ventana” a los datos: podés mirar, consultar y en algunos casos modificar, sin acceder directamente a las tablas subyacentes.

Sintaxis básica de VIEW

CREATE VIEW nombre_vista AS
SELECT columna1, columna2, ...
FROM tabla
WHERE condición;

👉 Se define igual que un CREATE TABLE, pero sin almacenar físicamente los datos.

Ejemplo básico de vista

CREATE VIEW clientes_activos AS
SELECT id, nombre, email
FROM clientes
WHERE activo = TRUE;

👉 Cada vez que uses clientes_activos, vas a obtener solo los clientes con estado activo.

Consulta:

SELECT * FROM clientes_activos;

Resultado: es como si ejecutaras el SELECT original, pero ya almacenado en la base.

Vistas como tablas virtuales

Aunque no almacenan datos (salvo las materializadas, que veremos luego), las vistas se pueden consultar igual que una tabla.

Ejemplo:

SELECT nombre FROM clientes_activos WHERE email LIKE '%@gmail.com';

Actualización de datos a través de vistas

En algunos motores, las vistas son actualizables: si cumplen ciertas condiciones (ej. derivan de una sola tabla, sin agregaciones), podés hacer INSERT, UPDATE o DELETE directamente sobre la vista y los cambios impactan en la tabla base.

Ejemplo (si es actualizable):

UPDATE clientes_activos
SET email = 'nuevo@mail.com'
WHERE id = 1;

👉 Este cambio se refleja en la tabla clientes.

Modificar o eliminar una vista

ALTER VIEW clientes_activos AS
SELECT id, nombre FROM clientes WHERE activo = TRUE;

DROP VIEW clientes_activos;

Vistas con múltiples tablas (JOIN)

CREATE VIEW pedidos_clientes AS
SELECT p.id, p.total, c.nombre
FROM pedidos p
JOIN clientes c ON p.cliente_id = c.id;

👉 Permite consultar pedidos junto con nombres de clientes sin escribir el JOIN cada vez.

Vistas con agregaciones

CREATE VIEW ventas_mensuales AS
SELECT DATE_TRUNC('month', fecha) AS mes, SUM(total) AS total
FROM ventas
GROUP BY DATE_TRUNC('month', fecha);

👉 Simplifica reportes de ventas mes a mes.

También puedes definir vistas que usen GROUP BY y funciones de agregación, junto con ORDER BY para ordenar resultados.

Vistas materializadas

Algunos motores soportan materialized views (vistas materializadas), que almacenan físicamente el resultado de la consulta para mejorar el rendimiento.

  • PostgreSQL / Oracle → soportan vistas materializadas.
  • MySQL → no tiene nativo, se simula con tablas e índices.

Ejemplo (PostgreSQL):

CREATE MATERIALIZED VIEW resumen_clientes AS
SELECT cliente_id, COUNT(*) pedidos, SUM(total) gastado
FROM pedidos
GROUP BY cliente_id;

Para refrescar:

REFRESH MATERIALIZED VIEW resumen_clientes;

Ejemplo práctico: sistema de e-commerce

  • Vista de clientes activos:
CREATE VIEW clientes_activos AS
SELECT id, nombre, email
FROM clientes
WHERE activo = TRUE;
  • Vista de productos con stock:
CREATE VIEW productos_stock AS
SELECT nombre, cantidad
FROM productos
WHERE cantidad > 0;
  • Vista de pedidos con nombre de cliente:
CREATE VIEW pedidos_info AS
SELECT p.id, c.nombre, p.total
FROM pedidos p
JOIN clientes c ON p.cliente_id = c.id;

👉 Estas vistas permiten consultas más rápidas para reportes y dashboards.

Ventajas de las vistas

  1. Simplicidad → reutilizás consultas largas y complejas.
  2. Seguridad → podés mostrar solo ciertas columnas a determinados usuarios.
  3. Mantenibilidad → si cambia la lógica, la actualizás en la vista, no en cada consulta.
  4. Consistencia → asegura que todos usen las mismas reglas de negocio.
  5. Compatibilidad → funcionan como tablas en la mayoría de consultas.

Limitaciones de las vistas

  1. No siempre son actualizables → depende del motor y la consulta.
  2. Rendimiento → si la consulta es compleja y la vista no es materializada, puede ser lenta.
  3. Dependencias → si eliminás columnas o tablas usadas, la vista puede romperse.
  4. No reemplazan índices → aunque ayudan, no siempre optimizan por sí solas.

Errores comunes con VIEW

  1. Asumir que las vistas almacenan datos
    👉 Las vistas normales son solo consultas guardadas.
  2. Actualizar vistas no actualizables
    👉 Si tienen agregaciones, DISTINCT o JOIN complejos, no permiten UPDATE.
  3. No usar alias claros
    👉 Puede generar ambigüedad en vistas con múltiples tablas.
  4. Olvidar refrescar vistas materializadas
    👉 Los datos pueden quedar desactualizados.
  5. Dependencias rotas
    👉 Si se eliminan tablas o columnas usadas en la vista, dará error.

Buenas prácticas con VIEW

  • Usar nombres descriptivos (ventas_mensuales, clientes_activos).
  • Documentar el propósito de la vista.
  • Evitar vistas demasiado anidadas (pueden volverse lentas).
  • Usar vistas materializadas cuando necesites rendimiento en reportes pesados.
  • Limitar el acceso directo a las tablas base y exponer vistas para seguridad.

Casos de uso de VIEW

  1. Reportes de negocio (ventas por mes, clientes activos, etc.).
  2. Seguridad (mostrar solo ciertas columnas a un rol de usuario).
  3. Integración de datos (combinar tablas en una sola salida).
  4. Preparación de datos (limpiar o transformar antes de analizarlos).
  5. Estándar corporativo (asegurar que todos los analistas usan las mismas definiciones).

Preguntas frecuentes (FAQ)

1. ¿Una vista almacena datos?
Las vistas normales no; solo las materializadas almacenan resultados.

2. ¿Puedo modificar datos a través de una vista?
Sí, si es actualizable (una sola tabla, sin agregaciones ni DISTINCT).

3. ¿Qué diferencia hay entre vista y tabla?
La tabla almacena datos físicos; la vista es una consulta guardada.

4. ¿Qué diferencia hay entre vista normal y materializada?

  • Vista normal → ejecuta la consulta cada vez.
  • Vista materializada → guarda resultados y hay que refrescarla.

5. ¿Las vistas mejoran el rendimiento siempre?
No siempre. Si la consulta es compleja y no es materializada, puede ser igual de costosa.

Conclusión

Las vistas en SQL son una herramienta clave para:

  • Simplificar consultas complejas.
  • Reutilizar lógica de negocio.
  • Mejorar la seguridad al ocultar datos sensibles.
  • Construir reportes consistentes y fáciles de usar.

Dominar las vistas te permite estructurar mejor tus bases de datos y facilitar el trabajo de usuarios y analistas.

Aprende a crear y mantener vistas en Vistas (Views) y visita el Glosario SQL completo.

Scroll al inicio