テーブル変数を返すと、マルチステートメントテーブル値関数になります。 また、SQL Serverが適切な実行プランの基礎となる統計がないことを除いて、テーブルのように扱われるため、パフォーマンスが低下する可能性があります。そのため、関数は非常に少数の行を返すと推定されます。したがって、より多くの行が返される場合、生成される計画は最適とは言えない可能性があります。
一方、SELECTのみを返すと、インラインテーブル値関数になります。 -それをビューとして考えてください。この場合、実際の基になるテーブルがメインクエリに取り込まれ、適切な統計に基づいてより適切な実行プランを生成できます。この場合、基本的に関数がメインクエリにマージされているだけなので、実行プランには関数についての言及がまったくないことに気付くでしょう。
MSDN CSS SQL Serverエンジニアによる(引用):