Depois de ler muitas das respostas aqui, gostaria de observar que há uma grande diferença entre uma função com valor de tabela embutida e qualquer outro tipo de função (TVF escalar ou de várias linhas).
Um TVF inline é simplesmente uma visualização parametrizada. Ele pode ser expandido e otimizado como uma visualização. Não é necessário materializar nada antes de "retornar resultados" ou algo assim (embora, infelizmente, a sintaxe tenha um
RETURN
. Um grande benefício que encontrei de um TVF inline sobre uma exibição é que ele força a parametrização necessária, enquanto que com uma exibição, você deve assumir que o chamador ingressará ou restringirá adequadamente o uso da exibição.
Por exemplo, temos muitas tabelas de fatos grandes em DW com um modelo estrela típico de Kimball. Eu tenho uma visão sobre um modelo centrado em tabela de fatos, que chamado sem nenhuma restrição, retornará centenas de milhões de linhas. Ao usar um TVF embutido com parametrização apropriada, os usuários não podem solicitar acidentalmente todas as linhas. O desempenho é em grande parte indistinguível entre os dois.