Microsoft KB Archive/935789

= FIX: On a computer that is running SQL Server 2005 and that has multiple processors, you may receive incorrect results when you run a query that contains an inner join =

Article ID: 935789

Article Last Modified on 10/22/2007

-

APPLIES TO


 * Microsoft SQL Server 2005 Standard Edition
 * Microsoft SQL Server 2005 Developer Edition
 * Microsoft SQL Server 2005 Enterprise Edition
 * Microsoft SQL Server 2005 Enterprise X64 Edition
 * Microsoft SQL Server 2005 Enterprise Edition for Itanium-based Systems
 * Microsoft SQL Server 2005 Standard X64 Edition
 * Microsoft SQL Server 2005 Standard Edition for Itanium-based Systems
 * Microsoft SQL Server 2005 Workgroup Edition

-



Bug #: 50001083 (SQL Hotfix)



Microsoft distributes Microsoft SQL Server 2005 fixes as one downloadable file. Because the fixes are cumulative, each new release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2005 fix release.



SYMPTOMS
Consider the following scenario:
 * You have a computer that is running Microsoft SQL Server 2005, and the computer has multiple processors.
 * You run a query that contains an inner join.
 * The inner join uses an equal operator to compare two columns.
 * One of the columns has the INT data type. The other column has the BIGINT data type.
 * The query returns values of the columns that are less than 0 or that are more than 4,294,967,295.
 * The query generates a parallel execution plan.

In this scenario, you may receive incorrect results when you run the query.



CAUSE
This problem occurs because the parallel execution plan for the query contains a Bitmap Filter operator. A bug in the Bitmap Filter operator may cause SQL Server to handle physical operators incorrectly.



RESOLUTION
The fix for this issue was first released in Cumulative Update (build 3161). For more information about how to obtain this cumulative update package for SQL Server 2005 Service Pack 2, click the following article number to view the article in the Microsoft Knowledge Base:

935356 Cumulative update package (build 3161) for SQL Server 2005 Service Pack 2

Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2005 fix release. Microsoft recommends that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:

937137 The SQL Server 2005 builds that were released after SQL Server 2005 Service Pack 2 was released

Microsoft SQL Server 2005 hotfixes are created for specific SQL Server service packs. You must apply a SQL Server 2005 Service Pack 2 hotfix to an installation of SQL Server 2005 Service Pack 2. By default, any hotfix that is provided in a SQL Server service pack is included in the next SQL Server service pack.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the &quot;Applies to&quot; section.



MORE INFORMATION
For more information about what files are changed, and for information about any prerequisites to apply the cumulative update package that contains the hotfix that is described in this Microsoft Knowledge Base article, click the following article number to view the article in the Microsoft Knowledge Base:

935356 Cumulative update package (build 3161) for SQL Server 2005 Service Pack 2 is available

Steps to reproduce the problem
To reproduce the problem, run the following statements in SQL Server 2005. Use tempdb go create table orders( c1 int ) go declare @i int select @i=0 while @i < 100000 begin insert orders values(@i) select @i=@i+1 end create table t1(c1 int not null) go create table t2(c1 bigint not null) go insert t1 select c1 - 1000 from orders go insert t2 select c1 - 1000 from orders go -- The following statement would return an incorrect result select * from t1 inner join t2 on t1.c1 = t2.c1 where t2.c1 + 1 < 0 option (maxdop 2, hash join) go

