This question already has an answer here:
I'm trying to decide who is right in the following argument:
How to effectively process data in MSSQL? Which one is faster?
Opinion 1: Data requests (this is especially true for complex ones) should be handled by SQL queries and the result be returned to the requesting C# code.
Opinion 2: First, raw data should be requested by simplistic SQL queries (SELECT * involving all concerned (joined) tables) and selection by conditions should be handled by C# LINQ or set operations involving lists, maps, arrays and whatnot, combined with iterations and local variables. This way, the heavy lifting happens in memory, making it faster than the disk-intensive operations of SQL server.
Opinion 3: A smart mix of the above.
(Personally I think Opinion 2 just explains how Opinion 1 works under the hood, of course we have to replace the terms C#, sets, loops etc. with low level constructs that SQL uses.)