🧚 Dengar! Beekeeper Studio adalah GUI database yang cepat, modern, dan open source Unduh
14 Januari 2026 Oleh Matthew Rathbone

Operator not equal (tidak sama dengan), ditulis <> atau !=, bernilai true jika dua nilai berbeda. Taruh di klausa WHERE untuk mengecualikan baris yang cocok dengan suatu nilai. Contoh-contohnya berfungsi di PostgreSQL, MySQL, SQLite, dan SQL Server.

Cara menggunakan not equal

Taruh <> atau != di antara dua nilai. Keduanya memiliki arti yang persis sama. <> adalah penulisan standar SQL, sedangkan != dipakai oleh sebagian besar bahasa pemrograman.

value1 <> value2
value1 != value2
SELECT 5 <> 3;
-- Output: true

SELECT 'apple' != 'apple';
-- Output: false

SELECT NULL <> 3;
-- Output: NULL

-- MySQL and SQLite show true and false as 1 and 0. SQL Server can't
-- select a comparison like this: use it in a WHERE clause there.

Dalam query, not equal ditaruh di klausa WHERE dan mempertahankan setiap baris yang nilainya berbeda:

-- Input: tickets
-- id | subject               | status
-- ---+-----------------------+--------
-- 1  | Login fails on Safari | open
-- 2  | Typo on pricing page  | closed
-- 3  | Export times out      | pending
-- 4  | Add a dark theme      | NULL

SELECT id, subject, status
FROM tickets
WHERE status <> 'closed';

-- Output:
-- id | subject               | status
-- ---+-----------------------+--------
-- 1  | Login fails on Safari | open
-- 3  | Export times out      | pending

Tiket 4 tidak muncul di hasil, padahal statusnya bukan 'closed'. Itulah aturan pertama di bawah ini.

Aturan yang perlu diketahui

  • Not equal tidak pernah cocok dengan NULL. Membandingkan NULL dengan apa pun menghasilkan NULL (tidak diketahui), bukan true, sehingga klausa WHERE membuang baris tersebut. Tambahkan OR column IS NULL untuk mempertahankan baris yang tidak punya nilai:
-- Input: the tickets table above

SELECT id, subject, status
FROM tickets
WHERE status <> 'closed' OR status IS NULL;

-- Output:
-- id | subject               | status
-- ---+-----------------------+--------
-- 1  | Login fails on Safari | open
-- 3  | Export times out      | pending
-- 4  | Add a dark theme      | NULL
  • Satu NULL di daftar NOT IN menghapus semua baris. status NOT IN ('closed', 'pending') adalah singkatan dari status <> 'closed' AND status <> 'pending', jadi satu NULL saja di daftar membuat seluruh kondisi menjadi tidak diketahui. Waspadai ini saat daftarnya berasal dari subquery pada kolom yang mengizinkan NULL:
-- Input: the tickets table above

SELECT id, status FROM tickets WHERE status NOT IN ('closed', 'pending');

-- Output:
-- id | status
-- ---+-------
-- 1  | open

SELECT id, status FROM tickets WHERE status NOT IN ('closed', NULL);

-- Output:
-- id | status
-- ---+-------
-- (0 rows)
  • MySQL dan SQL Server secara default mengabaikan huruf besar/kecil, jadi di sana 'Apple' <> 'apple' bernilai false.

  • Sebisa mungkin, minta apa yang Anda inginkan. status <> 'closed' juga akan cocok dengan status apa pun yang ditambahkan nanti, dan karena biasanya cocok dengan sebagian besar tabel, database jarang terbantu oleh index. Jika maksud Anda “open atau pending”, tulis saja status IN ('open', 'pending').

Sintaks alternatif

NOT (status = 'closed') adalah cara lain menulis status <> 'closed', dan juga melewatkan NULL dengan cara yang sama.

Untuk membandingkan tanpa kejutan NULL, gunakan IS DISTINCT FROM, not equal yang aman terhadap NULL dan memperlakukan NULL sebagai nilai tersendiri (SQL Server menambahkannya di 2022, SQLite di 3.39):

-- Input: the tickets table above

SELECT id, status FROM tickets WHERE status IS DISTINCT FROM 'closed';

-- Output:
-- id | status
-- ---+--------
-- 1  | open
-- 3  | pending
-- 4  | NULL

-- MySQL has no IS DISTINCT FROM. Use its NULL-safe <=> instead:
SELECT id, status FROM tickets WHERE NOT (status <=> 'closed');

Kapan sebaiknya menggunakan not equal?

Gunakan not equal saat query harus melewatkan baris yang memiliki satu nilai tertentu. Sebagian besar penggunaannya termasuk salah satu dari lima kasus ini.

Menyaring satu status atau kategori

Pesanan yang dibatalkan, invoice yang void, kategori yang tidak Anda jual: <> mengecualikan baris dengan nilai itu dan mempertahankan sisanya.

Melewatkan satu record tertentu

Bandingkan id untuk mengecualikan satu baris atau grup: artikel yang sedang dibaca saat Anda menampilkan artikel terkait, pengguna yang sedang login di daftar anggota lain, atau satu departemen di laporan perusahaan. Angka tidak perlu tanda kutip.

Mempersempit hasil dengan kondisi lain

Gabungkan <> dengan AND dan OR untuk mengecualikan suatu nilai sambil memfilter kolom lain, misalnya pesanan yang tidak dibatalkan dan melebihi jumlah tertentu. Untuk mengecualikan beberapa nilai dari kolom yang sama, gunakan NOT IN.

Menemukan baris dengan dua kolom yang berbeda

Not equal juga bisa dipakai antara dua kolom. Bandingkan nilai lama dengan yang baru, jumlah hasil hitung dengan angka di catatan, atau alamat pengiriman dengan alamat penagihan.

Mempertahankan baris yang nilainya kosong

Karena <> melewatkan NULL, tentukan apakah baris tanpa nilai perlu masuk ke hasil. Tambahkan OR column IS NULL untuk mempertahankannya, atau gunakan sintaks yang aman terhadap NULL di atas.

Contoh nyata not equal

Menjumlahkan invoice yang dihitung

Invoice yang void tidak boleh dihitung sebagai pendapatan:

-- Input: invoices
-- invoice_id | customer   | status | amount
-- -----------+------------+--------+--------
-- 1001       | Acme Corp  | paid   | 1200.00
-- 1002       | Birch & Co | void   | 450.00
-- 1003       | Acme Corp  | open   | 300.00
-- 1004       | Cobalt Ltd | paid   | 875.50

SELECT SUM(amount) AS invoiced
FROM invoices
WHERE status <> 'void';
-- Output: 2375.50

Seorang pembaca sedang membuka artikel 2. Tampilkan artikel lain dengan topik yang sama:

-- Input: articles
-- id | title                | topic
-- ---+----------------------+-------
-- 1  | Indexing basics      | SQL
-- 2  | Your first JOIN      | SQL
-- 3  | Docker for beginners | DevOps
-- 4  | Window functions     | SQL

SELECT id, title
FROM articles
WHERE topic = 'SQL'
  AND id <> 2;

-- Output:
-- id | title
-- ---+-----------------
-- 1  | Indexing basics
-- 4  | Window functions

Tampilkan hanya produk yang bisa dijual

Kecualikan produk yang sudah dihentikan, produk tanpa harga, dan produk yang stoknya habis:

-- Input: products
-- product_name   | category     | price | stock_quantity
-- ---------------+--------------+-------+---------------
-- Desk Organizer | Office       | 18.50 | 40
-- Fax Machine    | Discontinued | 89.00 | 3
-- Gift Wrap      | Seasonal     | 0.00  | 120
-- Trail Backpack | Outdoors     | 64.00 | 0
-- Water Bottle   | Outdoors     | 12.99 | 75

SELECT product_name, category, price
FROM products
WHERE category <> 'Discontinued'
  AND price > 0
  AND stock_quantity <> 0;

-- Output:
-- product_name   | category | price
-- ---------------+----------+------
-- Desk Organizer | Office   | 18.50
-- Water Bottle   | Outdoors | 12.99

Menemukan field yang benar-benar berubah

Audit log mencatat setiap penyimpanan, termasuk yang tidak mengubah apa pun. Bandingkan kedua kolom untuk mempertahankan perubahan yang nyata saja:

-- Input: audit_log
-- log_id | field_name | old_value   | new_value
-- -------+------------+-------------+------------
-- 1      | email      | dan@old.com | dan@new.com
-- 2      | city       | Austin      | Austin
-- 3      | plan       | free        | pro

SELECT log_id, field_name, old_value, new_value
FROM audit_log
WHERE old_value <> new_value;

-- Output:
-- log_id | field_name | old_value   | new_value
-- -------+------------+-------------+------------
-- 1      | email      | dan@old.com | dan@new.com
-- 3      | plan       | free        | pro

Jika salah satu kolom bisa NULL, gunakan IS DISTINCT FROM (atau NOT (old_value <=> new_value) di MySQL); jika tidak, nilai yang diisi untuk pertama kali tidak akan dihitung sebagai perubahan.

Mengingatkan semua yang belum bilang ya

Tamu yang belum membalas punya rsvp bernilai NULL, dan merekalah yang paling butuh pengingat:

-- Input: invitations
-- guest       | email            | rsvp
-- ------------+------------------+------
-- Ines Moreau | ines@example.com | yes
-- Raj Patel   | raj@example.com  | no
-- Hana Sato   | hana@example.com | NULL
-- Leo Grant   | leo@example.com  | maybe

SELECT guest, email, rsvp
FROM invitations
WHERE rsvp <> 'yes' OR rsvp IS NULL;

-- Output:
-- guest     | email            | rsvp
-- ----------+------------------+------
-- Raj Patel | raj@example.com  | no
-- Hana Sato | hana@example.com | NULL
-- Leo Grant | leo@example.com  | maybe

Bacaan lanjutan tentang not equal

Di blog ini:

Dokumentasi resmi:

Beekeeper Studio Adalah GUI Database Gratis & Open Source

Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.

Versi Linux Beekeeper punya fitur 100% lengkap, tanpa potong kompas, tanpa kompromi fitur.

Apa Kata Pengguna Tentang Beekeeper Studio

★★★★★
"Beekeeper Studio sepenuhnya menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat kerja dengan database kembali menyenangkan."
— Alex K., Database Developer
★★★★★
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung berfungsi."
— Sarah M., Full Stack Engineer

Siap Meningkatkan Workflow SQL Anda?

download Unduh Gratis