Some query execution plans in Microsoft SQL Server include pattern of evaluating a filter on top of a table or index scan/range operation. Some parts of the filter predicate may match an index key and may therefore be used to run an index seek or range scan. The remaining parts of the predicate are known as "residual" and must be evaluated for each row output by the scan or range operation. This would correspond to a filter operator. However, to improve performance, SQL Server can push such a filter down to the table access operator itself.

Although this approach improves performance overall, under some conditions (for example, in the case of an inaccurate cardinality estimation that is related to parameter sensitivity), the scan-below filter may be processing a larger number of rows than expected. This fact may be hidden during query performance troubleshooting when you are using an actual execution plan, because the actual number of rows that is returned will correspond to the number of rows after the residual predicate is applied and not the actual number of rows that are scanned from a table or index.


To improve diagnostics for scenario that is described in the Symptoms section, SQL Server 2012 Service Pack 3 (SP3) and SQL Server 2014 SP2 introduce a new showplan XML attribute, Actual Rows Read. This attribute provides information about how many rows were read by the operator before the residual predicate was applied.

This functionality was fist introduced in the following Service Packs for SQL Server. 

For more information about SQL Server 2012 Service Pack 3 (SP3), see bugs that are fixed in SQL Server 2012 Service Pack 3.

Service Pack 2 for SQL Server for SQL Server 2014

SQL Server 2016 Service Pack 1 (SP1) 

About Service packs for SQL Server

Service packs are cumulative. Each new service pack contains all the fixes that are in previous service packs, together with any new fixes. Our recommendation is to apply the latest service pack and the latest cumulative update for that service pack. You do not have to install a previous service pack before you install the latest service pack. Use Table 1 in the following article for finding more information about the latest service pack and latest cumulative update.

How to determine the version, edition and update level of SQL Server and its components

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

What affected your experience?

Thank you for your feedback!