Otro uso que ninguna de las respuestas anteriores parece haber mencionado es la implementación más fácil de cambios en la estructura de la tabla.
Digamos que desea retirar una tabla ( T_OLD) que contiene datos para usuarios activos y, en su lugar, usar una nueva tabla con datos similares (nombrados T_NEW) pero que tenga datos para usuarios activos e inactivos, con una columna adicional active.
Si su (s) sistema (s) tiene miles de consultas que las tienen SELECT whatever FROM T_OLD WHERE whatever, tiene dos opciones para la implementación:
1) Cold Turkey : cambie la base de datos y, al mismo tiempo, cambie, pruebe y libere numerosos fragmentos de código que contenían dicha consulta. MUY difícil de hacer (o incluso coordinar), muy arriesgado. Malo.
2) Gradual : cambie la base de datos creando la T_NEWtabla, soltando la T_OLDtabla y en su lugar creando una VISTA llamada T_OLDque imita la T_OLDtabla al 100% (por ejemplo, la consulta de vista es SELECT all_fields_except_active FROM T_NEW WHERE active=1).
Eso le permitiría evitar la liberación de CUALQUIER código que se selecciona actualmente T_OLDy realizar los cambios para migrar el código T_OLDa T_NEWsu gusto.
Este es un ejemplo simple, hay otros mucho más involucrados.
PD Por otro lado, probablemente debería haber tenido una API de procedimiento almacenado en lugar de consultas directas de T_OLD, pero ese no es siempre el caso.