Vistas SQL: qué son y cómo crearlas

Una vista SQL es una consulta guardada que se utiliza como si fuera una tabla virtual. Puede ocultar complejidad, presentar nombres comprensibles y limitar las columnas que consume un equipo, sin duplicar necesariamente los datos.
Las vistas son valiosas cuando representan una capa semántica estable. También pueden esconder consultas lentas o dependencias frágiles si se crean sin una responsabilidad clara.
Crear una vista
CREATE VIEW ventas_mensuales AS
SELECT DATE_TRUNC('month', fecha) AS mes,
region,
SUM(importe) AS ventas
FROM ventas
GROUP BY DATE_TRUNC('month', fecha), region;
Después se consulta como otra relación:
SELECT mes, ventas
FROM ventas_mensuales
WHERE region = 'Norte'
ORDER BY mes;
La sintaxis de fecha y reemplazo de vistas varía por motor, pero el concepto permanece: el sistema expande la definición y ejecuta la consulta subyacente.
Vista vs tabla
| Aspecto | Vista | Tabla |
|---|---|---|
| Almacenamiento habitual | Guarda definición | Guarda filas |
| Datos | Se obtienen al consultar | Persisten físicamente |
| Rendimiento | Depende de la consulta | Depende de estructura e índices |
| Escritura | Limitada o condicionada | Habitual |
| Uso | Abstracción y acceso | Fuente persistente |
Una vista convencional no es una copia automática. Si cambia la tabla base, el siguiente SELECT refleja el cambio, siempre que la definición siga siendo válida.
Vista materializada
Una vista materializada almacena el resultado y se actualiza mediante un proceso de refresco. Acelera cálculos caros a cambio de espacio, mantenimiento y posible desactualización.
Úsala cuando:
- la consulta cuesta mucho;
- los consumidores aceptan latencia;
- existe una política clara de actualización;
- puedes medir frescura y fallos.
No la presentes como “tiempo real” si se refresca una vez al día.
Seguridad y mínimo privilegio
Una vista puede exponer solo columnas aprobadas:
CREATE VIEW clientes_analitica AS
SELECT cliente_id, ciudad, segmento, fecha_alta
FROM clientes;
Concede lectura sobre la vista y evita acceso directo a la tabla con correo, teléfono u otros datos sensibles. Debes revisar el modelo de permisos del motor, propiedad de objetos y posibilidad de inferir información mediante filtros o agregados.
Una vista no anonimiza por sí sola. Si los campos restantes permiten reidentificar personas, el riesgo continúa.
Vistas actualizables
Algunas vistas simples permiten INSERT, UPDATE o DELETE; agregaciones, DISTINCT, uniones y grupos suelen limitar esa capacidad. Incluso cuando el motor lo admite, escribir a través de una vista puede sorprender al lector.
Para operaciones críticas, documenta qué tabla cambia y usa transacciones ACID. También pueden existir triggers INSTEAD OF, que añaden comportamiento implícito.
Organizar una capa de vistas
Un enfoque mantenible separa:
- Vistas de preparación: estandarizan claves y tipos.
- Vistas de negocio: definen conceptos como cliente activo o ingreso neto.
- Vistas de consumo: entregan granularidad y columnas requeridas por un informe.
Evita cadenas de diez vistas anidadas. La dependencia queda difícil de rastrear y una modificación puede impactar muchos consumidores. El linaje de datos ayuda a conocer qué informes dependen de cada objeto.
Rendimiento
Una vista no garantiza que la consulta sea rápida. Revisa:
- filtros que puedan empujarse a las tablas base;
- JOIN con claves y cardinalidades correctas;
- agregaciones repetidas;
- funciones aplicadas sobre columnas filtradas;
- índices de las tablas subyacentes;
- cantidad de capas anidadas.
Consulta el plan de ejecución real con valores representativos. Agregar un índice puede ayudar, pero primero confirma cuál operación consume tiempo.
Reemplazar y eliminar
Según el motor:
CREATE OR REPLACE VIEW ventas_mensuales AS
SELECT ...;
DROP VIEW ventas_mensuales;
Antes de reemplazar, compara columnas, tipos y permisos. Cambiar silenciosamente el significado de una columna sin cambiar su nombre rompe la confianza aunque la consulta continúe.
Buenas prácticas
- Usa nombres de negocio claros.
- Declara columnas en un orden estable.
- Evita
SELECT *. - Describe granularidad, propietario y frecuencia.
- Versiona las definiciones.
- Prueba compatibilidad antes de desplegar.
- Monitoriza tiempo de respuesta y frescura.
- Registra dependencias.
- Limita permisos en tablas base.
- Retira vistas sin consumidores.
Una buena vista reduce acoplamiento: los consumidores conocen una interfaz estable y el equipo puede mejorar la implementación sin reescribir cada informe.
Preguntas frecuentes
¿Una vista SQL guarda datos?
Una vista convencional guarda la consulta, no sus filas. Una vista materializada sí persiste el resultado hasta su actualización.
¿Una vista se actualiza automáticamente?
La vista convencional refleja las tablas cuando se consulta. La materializada necesita un refresco según el motor y la política definida.
¿Puedo crear índices sobre una vista?
Depende del motor y del tipo de vista. Las vistas indexadas o materializadas tienen requisitos específicos.
¿Se puede actualizar una tabla mediante una vista?
Algunas vistas simples son actualizables. Agregaciones, uniones y otras operaciones suelen impedirlo o requerir mecanismos especiales.
¿Una vista mejora el rendimiento?
No necesariamente. Una vista normal reutiliza una definición; la velocidad depende de la consulta, tablas, filtros e índices subyacentes.
¿Una vista protege datos sensibles?
Puede limitar columnas y filas, pero requiere permisos correctos y una evaluación de reidentificación. No sustituye una política de seguridad.

Deja una respuesta