It seems inline/table valued functions, views and sprocs can often be used to return the same result why that can sometimes be correct, the usage of a particular type of module depends on certain other factors as well. For example if you need to use the resultset as a part of query with join/IN operation you may be better off using UDF over SProc. Similarly if you want a resultset based on parameter selection, use SPRoc over views etc