It provides excellent abstraction capabilities.2. Performance
The performance is questional, depending on the output table size. To return a table a memory table must be created. If it was possible to transparently pass a result set back to the caller then the applications for abstraction with consideration with performance would open up greatly.
If used for abstraction where you need to emulate a view that does not alter the data, but serves as an abstraction then you incur a performance penalty.