IS NULL Operator in MySQL
Introduction
Missing data creates unique filtering challenges beyond simple comparisons.
THE IS NULL operator specifically tests for NULL values in MySQL.
It is widely used for:
- Finding missing data
- Data quality checks
- Cleaning incomplete records
What is the IS NULL Operator
IS NULL returns TRUE only for NULL values.
Regular = NULL or != NULL never works with NULLs.
Basic Syntax
sql
SELECT column_name
FROM table_name
WHERE column_name IS NULL;
Example
sql
SELECT * FROM Students
WHERE phone IS NULL;
Returns students with no phone number entered.
IS NOT NULL
Finds non-missing values.
sql
SELECT * FROM Students
WHERE phone IS NOT NULL;
NULL vs Empty String
NULL ≠ empty string in MySQL.
sql
SELECT * FROM Students
WHERE email IS NULL OR email = '';
Catches both missing and empty emails.
IS NULL with Multiple Columns
Multiple NULL checks.
sql
SELECT * FROM Students
WHERE phone IS NULL, AND email IS NULL;
IS NULL with NOT
Equivalent to IS NOT NULL.
sql
SELECT * FROM Students
WHERE NOT (phone IS NULL); -- Same as phone IS NOT NULL
IS NULL with AND Conditions
Combine with other filters.
sql
SELECT * FROM Students
WHERE marks IS NULL AND status != 'Dropped';
IS NULL with ORDER BY
Sort with NULL handling.
sql
SELECT * FROM Students
WHERE phone IS NOT NULL
ORDER BY marks DESC;
IS NULL with GROUP BY
Aggregate excluding NULLs.
sql
SELECT city, AVG(marks)
FROM Students
WHERE marks IS NOT NULL
GROUP BY city;
IS NULL with JOIN
Handle NULL foreign keys.
sql
SELECT s.name, c.course_name
FROM Students s
LEFT JOIN Courses c ON s.course_id = c.id
WHERE s.course_id IS NULL; -- Students without courses
IS NULL in Aggregate Functions
Aggregates ignore NULLs automatically.
sql
SELECT city, COUNT(*), AVG(marks)
FROM Students
GROUP BY city;
AVG skips NULL marks.
NULL Sorting Behaviour
NULLs sort first in ASC, last in DESC.
sql
SELECT * FROM Students
ORDER BY marks ASC; -- NULL marks first
IS NULL Performance Issues
Cannot use indexes on IS NULL conditions.
sql
-- Full table scan
WHERE phone IS NULL;
-- Index works
WHERE phone IS NOT NULL;
Execution Order with IS NULL
Evaluated in the WHERE clause after FROM.
FROM → WHERE (IS NULL) → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
Performance Considerations
- IS NULL prevents index usage
- IS NOT NULL can use an index
- Track NULL counts with COUNT(*) vs COUNT(column)
- Consider default values instead of NULLs
Important Notes
- = NULL or != NULL NEVER works
- NULL means "unknown/missing" (not zero/empty)
- COUNT(*) counts NULLs, COUNT(col) skips them
- All comparisons with NULL return NULL
- IS NULL / IS NOT NULL are special operators
Example Scenario
Data quality report excluding incomplete records:
sql
SELECT name, city, marks, phone
FROM Students
WHERE marks IS NOT NULL
AND city IS NOT NULL
AND city != ''
AND phone IS NOT NULL
ORDER BY marks DESC
LIMIT 100;
Common Mistakes
- Using = NULL instead of IS NULL
- Expecting != NULL to find non-NULLs
- NULL vs empty string confusion
- Performance surprise with IS NULL indexes
- Forgetting aggregates ignore NULLs
Key Points to Remember
- Use IS NULL / IS NOT NULL (never = NULL)
- NULL ≠ empty string ≠ 0
- IS NULL prevents index usage
- Aggregates automatically skip NULLs
- NULLs sort first (ASC) or last (DESC)
- COUNT(*) counts NULL rows, COUNT(col) skips them