Đây là một chút khó khăn. Giả sử bảng chỉ có một cột, thì Đếm (1) và Đếm (*) sẽ cho các giá trị khác nhau.
set nocount on
declare @table1 table (empid int)
insert @table1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(NULL),(11),(12),(NULL),(13),(14);
select * from @table1
select COUNT(1) as "COUNT(1)" from @table1
select COUNT(empid) "Count(empid)" from @table1
Kết quả truy vấn
Như bạn có thể thấy trong hình ảnh, Kết quả đầu tiên cho thấy bảng có 16 hàng. trong đó hai hàng là NULL. Vì vậy, khi chúng tôi sử dụng Count (*) , công cụ truy vấn sẽ đếm số lượng hàng, vì vậy chúng tôi có kết quả đếm là 16. Nhưng trong trường hợp Count (empid), nó đã đếm các giá trị không phải NULL trong empid cột . Vì vậy, chúng tôi đã nhận được kết quả là 14.
vì vậy bất cứ khi nào chúng tôi đang sử dụng COUNT (Cột), hãy đảm bảo chúng tôi chăm sóc các giá trị NULL như được hiển thị bên dưới.
select COUNT(isnull(empid,1)) from @table1
sẽ tính cả hai giá trị NULL và Non-NULL.
Lưu ý : Điều tương tự được áp dụng ngay cả khi bảng được tạo thành từ nhiều hơn một cột. Đếm (1) sẽ cho tổng số hàng không phân biệt giá trị NULL / Non-NULL. Chỉ khi các giá trị cột được tính bằng Đếm (Cột), chúng ta mới cần quan tâm đến các giá trị NULL.