Встроенная табличная функция (TVF) похожа на макрос: она развернута во внешний запрос. У него нет плана как такового: у вызывающего SQL есть план.
TVF с несколькими утверждениями имеет план (найдет ссылку).
TVF полезны, когда вы хотите изменить список SELECT для параметризованного входа. Встроенные TVF расширяются, и внешний выбор / где будет учитываться оптимизатором. Для многократных операторов TVF оптимизация не представляется возможной, потому что она должна выполняться до конца, , затем filter.
Лично я бы использовал сохраненный процесс вместо TVF с несколькими утверждениями. Они более гибкие (например, подсказки, могут изменить состояние, SET NOCOUNT ON, SET XACTABORT и т. Д.).
У меня нет возражений против встроенных TVF, но я не склонен использовать их для клиентского кода из-за невозможности использования SET и изменения состояния.