COUNT (DISTINCT имя_столбца) Несоответствие по сравнению с COUNT (имя_столбца) в SQL Server 2008?

Я столкнулся с проблемой, которая сводит меня с ума. Когда выполняя запрос ниже, я получаю счетчик 233,769

 SELECT COUNT(distinct  Member_List_Link.UserID)  
 FROM Member_List_Link  with (nolock)   
 INNER JOIN MasterMembers with (nolock)  
     ON Member_List_Link.UserID = MasterMembers.UserID   
  WHERE MasterMembers.Active = 1 And
        Member_List_Link.GroupID = 5 AND 
        MasterMembers.ValidUsers = 1 AND 
        Member_List_Link.Status = 1

. Но если я выполняю тот же запрос без отдельного ключевого слова, я получаю счетчик 233,748

 SELECT COUNT(Member_List_Link.UserID)  
 FROM Member_List_Link  with (nolock)   
 INNER JOIN MasterMembers with (nolock)
   ON Member_List_Link.UserID = MasterMembers.UserID   
 WHERE MasterMembers.Active = 1 And Member_List_Link.GroupID = 5 
  AND MasterMembers.ValidUsers = 1 AND Member_List_Link.Status = 1

. Я воссоздал все таблицы, поместил их во временные таблицы и снова запустил запросы:

  SELECT COUNT(distinct  #Temp_Member_List_Link.UserID)  
  FROM #Temp_Member_List_Link  with (nolock)   
  INNER JOIN #Temp_MasterMembers with (nolock)
    ON #Temp_Member_List_Link.UserID = #Temp_MasterMembers.UserID   
  WHERE #Temp_MasterMembers.Active = 1 And 
        #Temp_Member_List_Link.GroupID = 5 AND 
        #Temp_MasterMembers.ValidUsers = 1 AND 
        #Temp_Member_List_Link.Status = 1

И без особого ключевого слова

  SELECT COUNT(#Temp_Member_List_Link.UserID)  
  FROM #Temp_Member_List_Link  with (nolock)   
  INNER JOIN #Temp_MasterMembers with (nolock)
    ON #Temp_Member_List_Link.UserID = #Temp_MasterMembers.UserID   
  WHERE #Temp_MasterMembers.Active = 1 And 
        #Temp_Member_List_Link.GroupID = 5 AND 
        #Temp_MasterMembers.ValidUsers = 1 AND 
        #Temp_Member_List_Link.Status = 1

Кстати, я воссоздал временные таблицы, просто запустив ( select * from Member_List_Link в #temp ... )

И теперь, когда я проверяю разницу между COUNT (столбец) и COUNT (отдельный столбец) с этими временными таблицами, я их не вижу!

Так почему же есть несоответствия с исходными таблицами?

Я использую SQL Server 2008 (Dev Edition).

ОБНОВЛЕНИЕ - Включение профиля статистики

Столбец PhysicalOp только для первого запроса (без отдельного)

NULL
Compute Scalar
Stream Aggregate
Clustered Index Seek

Столбец PhysicalOp только для первого запроса (с отдельным)

NULL
Compute Scalar
Stream Aggregate
Parallelism
Stream Aggregate
Hash Match
Hash Match
Bitmap
Parallelism
Index Seek
Parallelism
Clustered Index Scan

Строки и выполнения для 1-го запроса (без отдельного)

1   1
0   0
1   1
1   1

Строки и выполнение для 2-го запроса (с отдельным)

Rows    Executes
1   1
0   0
1   1
16  1
16  16
233767  16
233767  16
281901  16
281901  16
281901  16
234787  16
234787  16

Добавление ОПЦИИ (MAXDOP 1) ко 2-му запросу (с отдельным)

Rows Executes

1           1
0           0
1           1
233767          1
233767          1
281901          1
548396          1

И результирующий PhysicalOp

NULL
Compute Scalar
Stream Aggregate
Hash Match
Hash Match
Index Seek
Clustered Index Scan
12
задан Ray 30 September 2011 в 18:24
поделиться