Después de leer muchas de las respuestas aquí, me gustaría señalar que existe una gran diferencia entre una función con valores de tabla en línea y cualquier otro tipo de función (TVF escalar o multilínea).
Un TVF en línea es simplemente una vista parametrizada. Se puede expandir y optimizar como una vista. No se requiere materializar nada antes de "devolver resultados" ni nada por el estilo (aunque, desafortunadamente, la sintaxis tiene un RETURN
.
Una gran ventaja que he encontrado de un TVF en línea sobre una vista es que fuerza la parametrización requerida, mientras que con una vista, debe asumir que la persona que llama se unirá o restringirá el uso de la vista de manera adecuada.
Por ejemplo, tenemos muchas tablas de hechos grandes en DW con un modelo de estrella típico de Kimball. Tengo una vista de un modelo centrado en una tabla de hechos, que llamado sin ninguna restricción, devolverá cientos de millones de filas. Mediante el uso de un TVF en línea con la parametrización adecuada, los usuarios no pueden solicitar accidentalmente todas las filas. El rendimiento es en gran medida indistinguible entre los dos.