DISTINCT SQL: Cara Ambil Nilai Unik Tanpa Duplikat
Blog/Tutorial SQL/DISTINCT SQL: Cara Ambil Nilai Unik Tanpa Duplikat

DISTINCT SQL: Cara Ambil Nilai Unik Tanpa Duplikat

BimaBima
·26 Januari 2026·7 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

DISTINCT adalah keyword SQL yang buang baris duplikat dari hasil query, ditulis langsung setelah SELECT. Sintaksnya SELECT DISTINCT nama_kolom FROM nama_tabel. Kalau kamu pilih beberapa kolom, DISTINCT ngecek kombinasi seluruh kolom itu — bukan tiap kolom sendiri-sendiri. Buat ngitung berapa banyak nilai unik, pakai COUNT(DISTINCT nama_kolom).

DISTINCT adalah keyword SQL yang buang baris kembar dari hasil query. Ditulis langsung setelah SELECT, dan itu doang yang perlu kamu ketik.

Gampang di kasus satu kolom. Mulai bikin bingung begitu kamu pilih dua kolom atau lebih — dan di situ orang paling sering ketipu.

Contoh di sini pakai tabel pelanggan toko_berkah: 8 baris, dengan kolom kota dan kanal jualan (Tokopedia, Shopee, WhatsApp).

Apa itu DISTINCT di SQL?

DISTINCT adalah keyword yang nyuruh database ngeluarin cuma baris yang unik di hasil query. Baris yang isinya persis sama bakal dibuang, sisain satu.

SELECT DISTINCT nama_kolom
FROM nama_tabel;

Posisinya selalu tepat setelah SELECT, sebelum daftar kolom. Gak bisa ditaruh di tengah-tengah.

Contoh langsung. Tabel pelanggan punya 8 baris, tapi cuma ada 3 kota:

SELECT DISTINCT kota
FROM pelanggan
ORDER BY kota;
kota
Bandung
Semarang
Surabaya

Delapan baris jadi tiga. Definisi resmi klausanya ada di dokumentasi SELECT PostgreSQL.

Gimana DISTINCT kerja di banyak kolom?

Ini bagian yang paling sering disalahpahami. DISTINCT gak berlaku per kolom — dia ngecek kombinasi seluruh kolom yang kamu tulis di SELECT.

SELECT DISTINCT kota, kanal
FROM pelanggan
ORDER BY kota, kanal;
kotakanal
BandungNULL
BandungShopee
BandungTokopedia
SemarangWhatsApp
SurabayaShopee
SurabayaWhatsApp

Bandung muncul tiga kali. Bukan bug — tiga barisnya punya kanal beda, jadi kombinasinya emang unik.

Sekarang jebakan yang bikin banyak orang mikir DISTINCT rusak:

SELECT DISTINCT kota, nama_pelanggan
FROM pelanggan;

Hasil: 8 baris — sama persis kayak tanpa DISTINCT

Tiap nama pelanggan beda, jadi tiap kombinasi kota+nama juga unik. DISTINCT tetap jalan, cuma emang gak ada yang bisa dibuang.

Kalau kamu mau daftar kota unik, tulis kolom kota doang. Titik.

Gimana cara hitung nilai unik pakai COUNT(DISTINCT)?

Buat tau berapa banyak nilai uniknya, bungkus pakai COUNT:

SELECT COUNT(*)              AS total_pelanggan,
       COUNT(DISTINCT kota)  AS jumlah_kota,
       COUNT(kanal)          AS kanal_terisi,
       COUNT(DISTINCT kanal) AS jumlah_kanal
FROM pelanggan;

Hasil: 8 | 3 | 7 | 3

Perhatiin kolom ketiga. COUNT(kanal) ngasih 7, bukan 8 — Lia Anggraini kanal-nya NULL, dan COUNT di kolom gak ngitung NULL.

Ini beda penting yang bikin angka laporan sering gak nyambung:

  • SELECT DISTINCT kanal → NULL muncul sebagai satu baris
  • COUNT(DISTINCT kanal) → NULL gak diitung sama sekali

Perilaku NULL yang bikin kepala pusing ini aku bahas lebih dalam di glosarium NULL.

Argumen COUNT lengkapnya ada di halaman fungsi COUNT.

Apa bedanya DISTINCT dan GROUP BY?

Dua query ini kasih hasil persis sama:

SELECT DISTINCT kota FROM pelanggan;

SELECT kota FROM pelanggan GROUP BY kota;

Di PostgreSQL dan MySQL, rencana eksekusinya pun mirip. Jadi soal kecepatan, hampir gak ada bedanya.

HalDISTINCTGROUP BY
Tujuan utamaBuang baris kembarGrupin baris buat dihitung
Bisa pakai SUM / COUNT per grup?GakBisa
Bisa disaring pakai HAVING?GakBisa
Panjang queryLebih pendekSedikit lebih panjang

Aturan yang aku pakai: butuh daftar nilai unik doang, pakai DISTINCT — maksudnya lebih kebaca. Butuh hitungan per grup, pakai GROUP BY.

Contoh kasus: pelanggan aktif toko_berkah

Bu Sari punya 8 pelanggan terdaftar. Pertanyaannya: berapa yang beneran belanja Januari ini?

SELECT COUNT(DISTINCT id_pelanggan) AS pelanggan_aktif
FROM transaksi;

Hasil: 4

Empat. Dari 8 pelanggan terdaftar, cuma separuh yang transaksi — padahal ada 8 transaksi tercatat.

Kalau tadi dia pakai COUNT(*), hasilnya 8 dan dia bakal ngira semua pelanggannya aktif. Beda satu keyword, beda kesimpulan bisnis.

Lanjut ke pertanyaan yang lebih berguna: kota mana yang pelanggannya balik lagi?

SELECT p.kota,
       COUNT(DISTINCT t.id_pelanggan) AS pembeli_unik,
       COUNT(t.id_transaksi)          AS jumlah_transaksi
FROM pelanggan p
JOIN transaksi t ON p.id_pelanggan = t.id_pelanggan
GROUP BY p.kota
ORDER BY pembeli_unik DESC;
kotapembeli_unikjumlah_transaksi
Bandung35
Surabaya23

Bandung: 3 pembeli bikin 5 transaksi — rata-rata 1,67 transaksi per orang. Wati sendiri belanja 3 kali dalam 2 minggu.

Semarang nol. Bagas daftar tapi belum pernah beli. Itu satu nama yang layak di-follow up.

Angka "pembeli unik" versus "jumlah transaksi" ini yang bikin kamu bisa bedain: tokonya rame karena banyak orang baru, atau karena beberapa orang yang belanja terus.

Kesalahan umum pakai DISTINCT

1. Nempelin DISTINCT buat nutupin JOIN yang salah

Hasil JOIN dobel-dobel, terus kamu tambah DISTINCT dan masalahnya "hilang". Padahal duplikatnya muncul karena kondisi JOIN kamu kurang ketat. DISTINCT cuma nutupin gejalanya, dan di data yang lebih besar hasilnya bisa tetep salah.

2. Ngira DISTINCT cuma ngefek ke kolom pertama

SELECT DISTINCT kota, id_pelanggan gak bakal ngasih kamu daftar kota unik. Selama ada kolom yang nilainya beda per baris, gak ada yang bisa dibuang.

3. Lupa NULL diperlakukan beda di COUNT

COUNT(DISTINCT kanal) ngasih 3, tapi SELECT DISTINCT kanal ngasih 4 baris (termasuk NULL). Waktu rekonsiliasi laporan, selisih 1 ini yang bikin orang ngecek berjam-jam.

4. Pakai DISTINCT di tabel jutaan baris tanpa mikir

Buat buang duplikat, database harus ngurutin atau nge-hash semua hasil. Di tabel gede, ini makan memori. Kalau kamu cuma butuh cek "kota apa aja yang ada", saring dulu pakai WHERE biar barisnya berkurang sebelum DISTINCT jalan.

5. Nulis DISTINCT kayak fungsi

SELECT DISTINCT(kota), kanal FROM pelanggan; keliatannya kayak DISTINCT cuma berlaku ke kota. Padahal kurungnya cuma dianggap kurung biasa — DISTINCT tetap kena semua kolom. Query-nya jalan, tapi maksud kamu dan maksud database beda.

FAQ soal DISTINCT SQL

DISTINCT bisa dipakai bareng WHERE?

Bisa, dan urutannya WHERE duluan. Database nyaring baris dulu, baru buang duplikat dari sisanya. Ini juga cara bikin DISTINCT lebih cepat — makin sedikit baris yang masuk, makin ringan kerjaannya.

COUNT(DISTINCT) bisa di beberapa kolom sekaligus?

Di MySQL bisa langsung: COUNT(DISTINCT kota, kanal). Di PostgreSQL pakai tuple: COUNT(DISTINCT (kota, kanal)). SQL Server gak dukung, jadi kamu harus gabung kolomnya jadi satu teks atau bungkus jadi subquery.

Ada gak keyword kebalikan DISTINCT?

Ada, namanya ALL — dan itu default-nya. SELECT ALL kota sama persis kayak SELECT kota. Hampir gak ada yang nulis ALL secara eksplisit, tapi bagus buat tau kalau ketemu di query orang lain.

DISTINCT ngaruh ke ORDER BY?

Ngaruh. Kolom yang dipakai di ORDER BY harus ikut muncul di SELECT waktu kamu pakai DISTINCT. SELECT DISTINCT kota FROM pelanggan ORDER BY nama_pelanggan bakal error, soalnya nama_pelanggan udah gak ada lagi di hasil.

Ringkasnya

DISTINCT buang baris kembar, dan dia lihat semua kolom yang kamu SELECT — bukan cuma yang pertama.

COUNT(DISTINCT kolom) itu senjata paling kepakai di laporan bisnis: berapa pelanggan unik, berapa produk unik, berapa kota unik. Angka yang beda jauh dari sekadar COUNT(*).

Kalau kamu nempelin DISTINCT buat ngilangin baris dobel hasil JOIN, berhenti dulu. Yang rusak JOIN-nya, bukan datanya.

Coba jalanin SELECT COUNT(*) dan SELECT COUNT(DISTINCT id_pelanggan) di tabel transaksi kerjaan kamu. Selisihnya sering bikin kaget. Buat ngerapiin dasar query-nya, mampir ke panduan SELECT SQL atau alias SQL.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel Terkait

7 SQL Client Gratis Terbaik buat Analis Data (2026)
Tutorial SQL
10 Juli 2026•9 menit baca

7 SQL Client Gratis Terbaik buat Analis Data (2026)

Nggak perlu bayar buat nulis query. Ini 7 SQL client gratis yang beneran dipakai analis, plus kelebihan dan kekurangannya masing-masing.

BimaBima
SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim
Tutorial SQL
7 Juli 2026•9 menit baca

SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim

Sepuluh aturan SQL style guide yang bikin query kamu kebaca sama tim — dan sama kamu sendiri 6 bulan lagi. Lengkap dengan contoh sebelum-sesudah.

BimaBima
Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Tutorial SQL
4 Juli 2026•11 menit baca

Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya

Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

Copyright © 2026 - All rights reserved

LINKS
SupportPricingDatasetBlogAffiliates
LEGAL
Terms of servicesPrivacy policy
Ngulik Data
DatasetLeaderboardBlogStore