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

29/09/2026

"SOVEREIGN CLOUD" VÀ NGHỊCH LÝ CHUYỂN ĐỔI SỐ: GIẢI MÃ BÀI TOÁN TUÂN THỦ CHO NGÀNH TÀI CHÍNH & CHÍNH PHỦ

Các tổ chức thuộc nhóm ngành trọng yếu như tài chính, ngân hàng (BFSI) và cơ quan nhà nước đang khao khát hiện đại hóa hệ thống IT (chuyển đổi sang kiến trúc Microservices, sử dụng Container/Kubernetes) để tăng tốc độ triển khai dịch vụ và nâng cao trải nghiệm người dùng. Tuy nhiên, họ lại đang vấp phải một "nghịch lý" lớn: Càng muốn áp dụng công nghệ Cloud hiện đại, rào cản về tuân thủ pháp lý và an toàn thông tin càng trở nên khắt khe.

29/09/2026

BÀI TOÁN "NOISY NEIGHBOR" TRÊN CLOUD VÀ CHIẾN LƯỢC TỐI ƯU HIỆU NĂNG CHO HỆ THỐNG CỐT LÕI

Trong kỷ nguyên mà dữ liệu là "dầu mỏ mới", việc vận hành các hệ thống xương sống (Core ERP, Core Banking) hay các workload tính toán chuyên sâu (AI, Machine Learning, Datalake) đòi hỏi năng lực phần cứng vô cùng mạnh mẽ.

27/09/2026

"BÃO GIÁ" HẠ TẦNG CNTT VÀ BÀI TOÁN SỐNG CÒN CỦA DOANH NGHIỆP: VÌ SAO PRIVATE CLOUD DẠNG DỊCH VỤ LÊN NGÔI?

Làn sóng bùng nổ hạ tầng AI toàn cầu đang tạo ra một "cơn địa chấn" về giá phần cứng máy chủ, chip nhớ DRAM, ổ cứng doanh nghiệp và chi phí năng lượng. Đứng trước áp lực phải chuyển đổi số nhưng lại vấp phải bài toán chi phí đầu tư (CapEx) đắt đỏ cùng thời gian giao hàng kéo dài hàng tháng, các nhà quản trị công nghệ (CIO) và tài chính (CFO) đang tìm kiếm một hướng đi mới: Không cần bỏ hàng tỷ đồng mua sắm hạ tầng mà vẫn sở hữu riêng một hệ thống Private Cloud hoàn chỉnh, an toàn và sẵn sàng vận hành ngay lập tức.

29/09/2026

Digital Workplace là gì? Xu hướng môi trường làm việc số cho doanh nghiệp

Digital Workplace là gì? Khám phá mô hình vận hành, thành phần, lợi ích, ứng dụng, thách thức và xu hướng môi trường làm việc số cho doanh nghiệp.

29/09/2026

Lỗ hổng Shellshock là gì? Cơ chế, tác động và cách khắc phục

Lỗ hổng Shellshock (CVE-2014-6271) trong Bash là gì, vì sao nghiêm trọng? Tìm hiểu nguyên nhân, hệ thống bị ảnh hưởng và cách kiểm tra, vá lỗi.

29/09/2026

Scratch là gì? Cách hoạt động, ứng dụng và đối tượng phù hợp

Scratch là gì? Tìm hiểu cách lập trình bằng khối lệnh, các khái niệm có thể học, ứng dụng thực tế và sự khác nhau giữa Scratch với ScratchJr.

29/09/2026

Phân biệt các loại Web Hosting: Đâu là lựa chọn phù hợp cho website?

Phân biệt các loại Web Hosting và tìm hiểu cách mỗi mô hình hoạt động, từ đó lựa chọn giải pháp phù hợp với nhu cầu, quy mô và định hướng phát triển website.

29/09/2026

Website có cần hosting không? Giải đáp chi tiết từ A-Z

Website có cần hosting không? Tìm hiểu vai trò của hosting, domain và các trường hợp cần và không cần mua hosting riêng cho website.

29/09/2026

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

Top nhà cung cấp dịch vụ Cloud Camera uy tín tại Việt Nam, cùng tiêu chí lựa chọn và những lưu ý quan trọng trước khi đăng ký dịch vụ.

28/09/2026

Trigger là gì trong DBMS? Cách hoạt động, các loại phổ biến và ứng dụng

Trigger là gì trong DBMS? Tìm hiểu cách trigger hoạt động, các loại phổ biến, ví dụ minh họa, ưu nhược điểm và khi nào nên sử dụng.