Tuyển dụng
Viettel IDC

Giá trị NULL trong SQL là gì? Cách hiểu đúng và Xử lý hiệu quả

10/07/2026

Câu truy vấn WHERE cot != 'gia_tri' bỗng dưng bỏ sót dữ liệu? Các hàm COUNT, SUM trả về kết quả sai lệch dù bảng "nhìn có vẻ đủ"? Nguyên nhân cốt lõi thường đến từ giá trị NULL trong SQL — một trạng thái mang logic 3 giá trị (three-valued logic) cực kỳ dễ bị nhầm lẫn với số 0 hay chuỗi rỗng. 

Bài viết dưới đây sẽ giải phẫu bản chất thực sự của NULL, "vạch trần" các lỗi tính toán thường gặp và hướng dẫn bạn cách xử lý chuẩn xác bằng IS NULL, COALESCE hay NULLIF. 

Giá trị NULL trong SQL là gì? Cách hiểu đúng và Xử lý hiệu quả

1. Giá trị NULL trong SQL là gì?

Giá trị NULL trong SQL không phải là "rỗng", không phải là số 0, và tuyệt đối không phải là một chuỗi khoảng trắng. Về bản chất, NULL đại diện cho một trạng thái không xác định (Unknown) hoặc không tồn tại (Missing). Nó biểu thị rằng tại thời điểm bản ghi được tạo ra, dữ liệu của cột đó chưa được thu thập, chưa biết, hoặc hoàn toàn không áp dụng được.

Đây là "cái bẫy" tư duy kinh điển khiến nhiều người mới làm việc với cơ sở dữ liệu thường xuyên nhầm lẫn:

- NULL ≠ Chuỗi rỗng (''): Một cột ghi_chu = '' có nghĩa là hệ thống đã ghi nhận giá trị của cột này, chỉ là người dùng cố tình để trống, không nhập ký tự nào. Ngược lại, ghi_chu = NULL nghĩa là hệ thống chưa từng nhận được bất kỳ thông tin nào để ghi nhận.

- NULL ≠ Số 0: Một cột so_du = 0 là một con số toán học xác định cụ thể (tài khoản đã hết tiền). Trong khi đó, so_du = NULL nghĩa là số dư chưa được xác định (có thể do tài khoản mới tạo, chưa liên kết thẻ, hoặc chưa phát sinh giao dịch, chứ không khẳng định là bằng 0).

Ba trạng thái (NULL, '', 0) mang ý nghĩa logic hoàn toàn khác biệt. Việc đánh đồng chúng chính là "khởi nguồn" của hàng loạt sai số trong các ứng dụng thực tế.

2. Cơ chế Logic Ba Trạng Thái (Three-Valued Logic) khi xử lý NULL

Khác với ngôn ngữ lập trình thông thường sử dụng hệ logic Boolean (chỉ có 2 giá trị TRUE và FALSE), SQL vận hành dựa trên hệ logic ba trạng thái (Three-Valued Logic): TRUE (Đúng), FALSE (Sai) và UNKNOWN (Không xác định).

Điểm mấu chốt bạn cần nhớ: Bất kỳ phép toán học hay so sánh nào có sự tham gia của NULL đều trả về UNKNOWN. Thậm chí, biểu thức NULL = NULL cũng trả về kết quả là UNKNOWN! Lý do rất hợp lý: Bạn không thể khẳng định hai giá trị "không xác định" là bằng nhau được.

Đặc tính này chi phối trực tiếp đến cách các toán tử logic (AND, OR, NOT) phản ứng khi đụng độ NULL (UNKNOWN):

Biểu thức điều kiện

Kết quả trả về

TRUE AND UNKNOWN

UNKNOWN

FALSE AND UNKNOWN

FALSE

TRUE OR UNKNOWN

TRUE

FALSE OR UNKNOWN

UNKNOWN

NOT UNKNOWN

UNKNOWN

Lời giải mã cho "cạm bẫy" trong mệnh đề WHERE:

Trong SQL, mệnh đề WHERE chỉ lọc và trả về những dòng có kết quả kiểm tra điều kiện là TRUE. Mọi dòng trả về FALSE hoặc UNKNOWN đều bị loại bỏ thẳng tay.

Đó chính là lý do vì sao câu lệnh WHERE cot != 'gia_tri' lại bỏ sót các bản ghi có cot = NULL.

Khi hệ thống đánh giá biểu thức NULL != 'gia_tri', kết quả sinh ra là UNKNOWN (chứ không phải TRUE). Dù theo tư duy trực giác, bạn nghĩ "Không xác định thì dĩ nhiên là phải khác một giá trị cụ thể", nhưng theo quy tắc Three-Valued Logic của SQL, dòng dữ liệu đó lập tức bị gạch tên khỏi kết quả trả về.

3. Các lỗi thường gặp khi làm việc với Giá Trị NULL Trong SQL

Hàm tổng hợp (aggregate functions)

Sự khác biệt chí mạng nằm ở cách các hàm đếm xử lý dữ liệu: COUNT(*) đếm tất cả các dòng bất kể NULL, trong khi COUNT(cot) chỉ đếm các dòng có giá trị khác NULL ở cột đó. Hai kết quả này có thể chênh lệch đáng kể nếu bạn không nắm rõ. Tương tự, các hàm SUM, AVG, MAX, MIN đều tự động bỏ qua các dòng NULL khi tính toán.

Phép nối chuỗi

Trong nhiều hệ quản trị CSDL, toán tử nối chuỗi (ví dụ || trong PostgreSQL, hoặc hàm CONCAT tùy hệ thống) có một rủi ro tiềm ẩn: khi gặp một thành phần là NULL, nó có thể khiến toàn bộ kết quả của chuỗi trở thành NULL. Điều này gây ra những lỗi hiển thị thông tin rất khó phát hiện.

JOIN với cột chứa NULL

Khi điều kiện JOIN dựa trên một cột có giá trị NULL, dòng dữ liệu đó sẽ không bao giờ khớp với bất kỳ dòng nào ở bảng còn lại — kể cả khi bảng kia cũng có dòng chứa NULL tương ứng. Lý do là biểu thức NULL = NULL trả về UNKNOWN chứ không phải TRUE.

Ràng buộc UNIQUE Constraint

Một điểm dễ gây bất ngờ là nhiều hệ quản trị CSDL phổ biến (PostgreSQL, SQL Server, MySQL) vẫn cho phép nhiều dòng có giá trị NULL cùng tồn tại trong một cột được đánh dấu UNIQUE. Cơ sở dữ liệu cho phép điều này vì NULL không được xem là "trùng" với một NULL khác.

4. Ví dụ thực tế: Báo cáo doanh thu sai lệch do NULL

Giả sử một hệ thống báo cáo doanh thu có cột sales_rep_id để gán đơn hàng cho nhân viên phụ trách. Tuy nhiên, các đơn hàng từ kênh online (khách tự đặt) lại có giá trị sales_rep_id = NULL.

Khi đội ngũ phân tích chạy báo cáo bằng lệnh GROUP BY sales_rep_id, các đơn hàng NULL bị gộp chung vào một nhóm. Dù đúng về mặt kỹ thuật, nhưng nếu báo cáo không hiển thị rõ nhóm này là gì, người đọc rất dễ hiểu nhầm là dữ liệu bị thiếu hoặc lỗi hệ thống.

Nghiêm trọng hơn, nếu sử dụng điều kiện lọc WHERE sales_rep_id != 'NV_A' để loại trừ một nhân viên cụ thể, toàn bộ các đơn hàng có sales_rep_id = NULL sẽ bị gạch bỏ khỏi kết quả một cách âm thầm (do biểu thức kiểm tra với NULL luôn trả về UNKNOWN). Hậu quả là tổng doanh thu trên báo cáo bị sai lệch và thấp hơn thực tế mà không hề có cảnh báo lỗi nào.

Cách xử lý phù hợp: Sử dụng hàm COALESCE(sales_rep_id, 'Kênh Online') để gán nhãn rõ ràng cho các đơn hàng không có nhân viên phụ trách trước khi đưa vào GROUP BY. Đồng thời, rà soát lại các điều kiện lọc và ưu tiên sử dụng IS NULL / IS NOT NULL thay vì so sánh trực tiếp bằng toán tử.

4. Ví dụ thực tế: Báo cáo doanh thu sai lệch do NULL

5. Cách xử lý Giá trị NULL trong SQL đúng cách

Để tránh các sai sót không đáng có, đây là các công cụ và kỹ thuật chuẩn mực bạn cần nắm vững khi làm việc với giá trị NULL:

Công cụ

Công dụng cốt lõi

Ví dụ thực tế

IS NULL / IS NOT NULL

Kiểm tra một giá trị có phải là NULL hay không. Đây là cú pháp thay thế bắt buộc cho = NULL hoặc != NULL (những biểu thức luôn trả về UNKNOWN).

WHERE sales_rep_id IS NULL

COALESCE(cot, gia_tri)

Trả về giá trị đầu tiên khác NULL trong danh sách tham số. Cực kỳ hữu ích để gán một giá trị mặc định thay thế NULL khi tính toán hoặc hiển thị.

COALESCE(sales_rep_id, 'Kênh Online')

NULLIF(a, b)

Trả về NULL nếu hai giá trị a và b bằng nhau, ngược lại trả về giá trị a. Tuyệt chiêu để tránh lỗi chia cho 0 (Divide by zero) chết người trong các báo cáo.

SUM(revenue) / NULLIF(SUM(orders), 0)

NOT NULL Constraint

Ràng buộc cứng ở tầng schema, chặn đứng việc ghi giá trị trống vào cột ngay từ khâu thiết kế cơ sở dữ liệu.

sales_rep_id INT NOT NULL

Nguyên tắc "vàng" cần nhớ: Luôn dùng IS NULL / IS NOT NULL khi xác định sự tồn tại của dữ liệu. Dùng COALESCE khi cần một "phao cứu sinh" thay thế giá trị để tính toán. Cuối cùng, hãy sử dụng ràng buộc NOT NULL ngay từ bước tạo bảng nếu nghiệp vụ bắt buộc cột đó không được phép bỏ trống.

6. NULL và Bài toán thiết kế Schema trong doanh nghiệp

Quyết định cho phép một cột chứa NULL hay không phải dựa vào thực tế nghiệp vụ, tuyệt đối không áp dụng máy móc.

Với các trường thông tin sống còn và bắt buộc phải có ngay khi khởi tạo bản ghi (ví dụ: email của tài khoản người dùng), hãy khóa chặt bằng ràng buộc NOT NULL. Ngược lại, với những thông tin mang tính chất "chờ phát sinh" (ví dụ: ngay_huy_hop_dong khi hợp đồng vẫn đang có hiệu lực), bạn nên cho phép NULL. Việc cố tình lấp liếm bằng một giá trị mặc định giả (như ngày 01/01/1900 hoặc chuỗi N/A) sẽ làm hỏng ngữ nghĩa dữ liệu và gây thảm họa cho các truy vấn phân tích sau này.

Lưu ý kỹ thuật về Index: Trong nhiều hệ quản trị CSDL, các dòng chứa giá trị NULL sẽ không được đưa vào cấu trúc cây chỉ mục (ví dụ B-Tree Index). Nếu ứng dụng của bạn thường xuyên phải quét và lọc dữ liệu bằng điều kiện IS NULL, bạn sẽ cần các chiến lược lập chỉ mục đặc thù (như Filtered Index) để không làm giảm hiệu năng hệ thống.

Viettel Database Service — Nền tảng hỗ trợ chuẩn hóa thiết kế và vận hành schema

Thiết kế schema chuẩn hóa ngay từ vạch xuất phát — bao gồm chiến lược xử lý NULL và ràng buộc dữ liệu — sẽ cứu doanh nghiệp khỏi vô số lỗi logic hệ thống về sau.

Với Viettel Database Service (giải pháp DBaaS từ Viettel IDC), doanh nghiệp được sở hữu một hạ tầng cơ sở dữ liệu mạnh mẽ, ổn định, tích hợp sẵn hệ thống giám sát hiệu năng liên tục. Đội ngũ chuyên gia kỹ thuật 24/7 của Viettel IDC sẽ lo liệu toàn bộ gánh nặng vận hành phần cứng, giúp các DBA và Developer của bạn tập trung 100% trí lực vào việc chuẩn hóa cấu trúc dữ liệu và tối ưu logic nghiệp vụ.

Tìm hiểu chi tiết dịch vụ tại: https://viettelidc.com.vn/viettel-database-service 

7. Câu hỏi thường gặp (FAQ) về Giá trị NULL trong SQL

NULL có chiếm dung lượng lưu trữ không?

Có, nhưng cực kỳ nhỏ. Các hệ quản trị CSDL hiện đại không cấp phát toàn bộ dung lượng của một kiểu dữ liệu để lưu NULL. Thay vào đó, chúng sử dụng một cờ đánh dấu (Null Bitmap) để ghi nhận trạng thái trống. Do đó, lưu NULL tiết kiệm bộ nhớ hơn rất nhiều so với việc lưu các giá trị mặc định giả (như 0 hay '').

Tại sao COUNT(*) và COUNT(cot) cho ra kết quả khác nhau khi có NULL?

Đây không phải là lỗi, mà là hành vi chuẩn mực của SQL. COUNT(*) đếm tổng số dòng vật lý của bảng (bao gồm cả dòng chứa NULL). Trong khi đó, COUNT(cot) đếm số lượng các giá trị thực tế tồn tại trong cột đó (bỏ qua NULL). Sự chênh lệch xảy ra khi cột mục tiêu chứa nhiều giá trị trống.

Có nên tránh hoàn toàn NULL trong thiết kế database không?

Không nên. NULL là một phần tinh tế của mô hình dữ liệu quan hệ, làm nhiệm vụ biểu diễn thông tin "chưa xác định". Việc ép buộc xóa bỏ NULL bằng cách nhét các giá trị "rác" (như 01/01/1900) sẽ làm sai lệch ngữ nghĩa dữ liệu nghiêm trọng hơn việc học cách xử lý NULL đúng chuẩn.

Kết luận

Hiểu rõ và làm chủ giá trị NULL là một kỹ năng nền tảng nhưng lại thường bị xem nhẹ nhất trong SQL. Nó quyết định trực tiếp đến tính toàn vẹn của báo cáo, độ chính xác của ứng dụng và tốc độ truy vấn. Bằng cách nắm vững logic ba trạng thái (Three-Valued Logic), vận dụng linh hoạt IS NULL, COALESCE, NULLIF và thiết lập schema hợp lý, doanh nghiệp sẽ chặn đứng được những rò rỉ dữ liệu âm thầm.

Để được hỗ trợ tư vấn và tìm hiểu các dịch vụ của Viettel, bạn có thể liên hệ trực tiếp tới Viettel IDC qua các kênh:

- Hotline: 1800 8088 (miễn phí cước gọi)

- Fanpage: https://www.facebook.com/viettelidc  

Bình luận ()

Đăng nhập | Đăng ký
để gửi bình luận
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Xem thêm bình luận

Tin liên quan

20/10/2026

Viettel IDC dẫn đầu bảng xếp hạng Enterprise of Choice 2026 tại nhiều hạng mục quan trọng

Viettel IDC đạt 6 thứ hạng nổi bật tại Enterprise of Choice 2026, trong đó có 5 vị trí Top 1 ở các hạng mục về công nghệ thông tin, phát triển bền vững, doanh nghiệp được yêu thích bởi người lao động, lãnh đạo và thế hệ trẻ. Kết quả ghi nhận những nỗ lực của doanh nghiệp trong xây dựng môi trường làm việc tích cực, lấy con người làm trung tâm.

20/10/2026

So sánh các dịch vụ cloud backup phổ biến tại Việt Nam

So sánh các dịch vụ cloud backup phổ biến tại Việt Nam về phạm vi sao lưu, bảo mật, khôi phục, chi phí và mô hình triển khai để doanh nghiệp dễ lựa chọn.

20/10/2026

Dịch vụ lưu trữ đám mây nào tốt nhất cho doanh nghiệp nhỏ 2026? 9 lựa chọn nên tham khảo

So sánh 9 dịch vụ lưu trữ đám mây cho doanh nghiệp nhỏ năm 2026: công cụ chia sẻ file, Object Storage trong nước và quốc tế, kèm tiêu chí chọn nhà cung cấp.

20/10/2026

Mua chứng chỉ SSL cho website ở đâu uy tín? 5 kênh mua và triển khai

Có 5 kênh mua và triển khai chứng chỉ SSL cho website: CA, đại lý trong nước, nhà cung cấp hosting, nhà đăng ký tên miền và CA miễn phí. Xem ưu nhược điểm và cách kiểm tra nơi bán uy tín.

20/10/2026

Lưu trữ ngoài có an toàn không? Rủi ro và cách bảo vệ dữ liệu doanh nghiệp

Lưu trữ dữ liệu bên ngoài có an toàn không? Phân tích rủi ro, các lớp bảo vệ cần có và tiêu chí chọn nhà cung cấp cho doanh nghiệp.

19/10/2026

VDS là gì? VDS khác VPS và Dedicated Server như thế nào?

VDS là gì, khác VPS và Dedicated Server ở điểm nào, ưu nhược điểm và trường hợp nên sử dụng.

19/10/2026

Cách triển khai observability cho ứng dụng đám mây và microservices như thế nào

Hướng dẫn triển khai observability cho ứng dụng đám mây và microservices qua 7 bước, từ xác định SLI/SLO đến tối ưu chi phí telemetry.

19/10/2026

Top nhà cung cấp dịch vụ Dedicated Server giá tốt, tốc độ ổn định tại Việt Nam

Tổng hợp các nhà cung cấp Dedicated Server tại Việt Nam, so sánh mô hình dịch vụ, cấu hình, Data Center, uptime, băng thông và giá công bố.

19/10/2026

Top nhà cung cấp dịch vụ Hosting và VPS uy tín tại Việt Nam

Top nhà cung cấp Hosting và VPS uy tín tại Việt Nam. So sánh hạ tầng, uptime, loại dịch vụ và các tiêu chí cần kiểm tra trước khi lựa chọn.

19/10/2026

Thuê Cloud GPU có đắt không?

Thuê Cloud GPU có đắt không phụ thuộc vào yếu tố nào? Phân tích các mô hình tính phí, chi phí ẩn và cách tối ưu ngân sách khi dùng GPU đám mây.