Skip to main content

Comparison Operators

Learning Focus

Use this lesson to master Comparison Operators — the foundation of every WHERE clause.

Available Operators

OperatorMeaning
=Equal to
!= or <>Not equal to
<Less than
>Greater than
<=Less than or equal
>=Greater than or equal
IS DISTINCT FROMNot equal, NULL-safe
IS NOT DISTINCT FROMEqual, NULL-safe

Examples

-- Equality
SELECT * FROM employees WHERE department = 'Engineering';

-- Not equal
SELECT * FROM employees WHERE department != 'HR';

-- Numeric comparison
SELECT * FROM employees WHERE salary >= 80000;

-- Between (inclusive)
SELECT * FROM employees WHERE salary BETWEEN 70000 AND 90000;

-- Date comparison
SELECT * FROM employees WHERE hire_date > DATE '2021-01-01';

-- NULL-safe comparison (IS DISTINCT FROM handles NULLs correctly)
SELECT * FROM employees WHERE hire_date IS DISTINCT FROM NULL;
-- same as: WHERE hire_date IS NOT NULL

NULL-Safe Comparison

-- Standard = fails with NULL
SELECT NULL = NULL; -- NULL (not true!)

-- NULL-safe equality
SELECT NULL IS NOT DISTINCT FROM NULL; -- true
SELECT 1 IS NOT DISTINCT FROM 1; -- true
SELECT 1 IS NOT DISTINCT FROM NULL; -- false

Common Pitfalls

PitfallConsequencePrevention
col = NULLAlways returns nothingUse IS NULL or IS DISTINCT FROM NULL
Comparing text with >Lexicographic (not numeric) comparisonCast to numeric first: col::INTEGER > 100
Using = for approximate float comparisonFloat precision errorsUse abs(a - b) < 0.0001 for floats

Quick Reference

WHERE col = val
WHERE col != val
WHERE col > val
WHERE col BETWEEN a AND b
WHERE col IS DISTINCT FROM NULL
WHERE col IS NOT DISTINCT FROM NULL

What's Next