How to optimize this query - replace/optimize NOT IN : <p>The query should return values that are not included in the top - for example - 10.
Anyway to optimize it? Maybe replace NOT IN?</p>

<pre><code>CREATE PROCEDURE procName 
    @ClientId char(36)
    , @Top int
    , @StartDate datetime
    , @EndDate datetime
AS
BEGIN
    SELECT
        'Outside' AS LocationName
        , SUM(Copies * Pages) AS TotalPages
    FROM table1 tb1 
    INNER JOIN table2 tb2 ON tb2.Tb2Id = tb1.Tb2Id 
    INNER JOIN [table3] tb3 ON tb3.LocationId = tb2.LocationId
    WHERE tb1.ClientId = @ClientId AND tb1.TimeOrdered BETWEEN @StartDate AND @EndDate
        AND tb3.[Name] NOT IN (
            SELECT TOP(@Top)
                tb3.[Name] AS LocationName
            FROM table1 tb1 
            INNER JOIN table2 tb2 ON tb2.Tb2Id = tb1.Tb2Id 
            INNER JOIN [table3] a ON tb3.LocationId = tb2.LocationId
            WHERE tb1.ClientId = @ClientId AND tb1.TimeOrdered BETWEEN @StartDate AND @EndDate
            GROUP BY tb3.Name
            ORDER BY SUM(tb1.Copies * tb1.Pages) DESC   
        )
END
</code></pre>
