Une fonction de table en ligne (TVF) est comme une macro :elle est développée dans la requête externe. Il n'a pas de plan en tant que tel :le SQL appelant a un plan.
Un TVF multi-instructions a un plan (trouvera une référence).
Les TVF sont utiles lorsque vous souhaitez faire varier la liste SELECT pour une entrée paramétrée. Les TVF en ligne sont étendues et la sélection/où externe sera prise en compte par l'optimiseur. Pour les TVF multi-instructions, l'optimisation n'est pas vraiment possible car elle doit s'exécuter jusqu'à la fin, puis filtre.
Personnellement, j'utiliserais un proc stocké sur un TVF multi-instructions. Ils sont plus flexibles (par exemple, des conseils, peuvent changer d'état, SET NOCOUNT ON, SET XACTABORT, etc.).
Je n'ai aucune objection aux TVF en ligne, mais je n'ai pas tendance à les utiliser pour le code client en raison de l'impossibilité d'utiliser SET et de changer d'état.