• The difference originates from the use of the GROUP BY clause.

    In your first query, SQL Server will build the complete result set, gathering all data for each and every f.fund and f.fund_id.

    Once it has the complete set, it will start removing all duplicates from it.

    In the second one, SQL Server will use a more intelligent approach, that limits the initial result set.

    Try using SET SHOWPLAN_TEXT ON before your query. You can see the execution plan, which will give you detailed information what is going on under the hood.