Interessante vraag, want je hebt natuurlijk gelijk: het is behoorlijk mistig wat daarmee bedoeld wordt. Het wordt misschien wat duidelijker als je kijkt naar de SQL vertaling van de twee opties:
Unieke waarden:
Code:
SELECT DISTINCT [Veldnamen] FROM [Tabel1] INNER JOIN [Tabel2] ON [Tabel1].SleutelID = [Tabel2].SleutelID
Unieke Records:
Code:
SELECT DISTINCTROW [Veldnamen] FROM [Tabel1] INNER JOIN [Tabel2] ON [Tabel1].SleutelID = [Tabel2].SleutelID
Je geeft zelf al in je laatste zin aan wat DISTINCT doet: controleren of alle velden die
je ziet uniek zijn. Een query met DISTINCT geeft als resultaat altijd een snapshot; het resultaat van de query kan ook niet bewerkt worden.
Maar er is nog een andere vorm van uniekheid, en die is op basis van het volledige record: DISTINCTROW. Deze variant kijkt niet naar de velden die in het
resultaat van de query uniek zijn, maar naar de volledige records die
aan de basis staan van de query. Dus ook al gebruik je maar één veld van een tabel, DISTINCTROW kijkt naar unieke records op basis van
alle velden uit de brontabellen. En dat levert dus meestal een uitgebreidere recordset op. Bijkomend voordeel: een query op basis van DISTINCTROW blijft bewerkbaar, omdat de unieke records uit een onderliggende tabel altijd getoond worden. En individuele records kun je uiteraard bewerken.
Een voorbeeldje maakt het hopelijk wat duidelijker
Neem een tabel Klanten:
Klant-id Bedrijfsnaam Plaats Land
1 Ernst Handel Berlijn Duitsland
2 Familia Arquibaldo Madrid Spanje
3 FISSA Fabrica Inter. Salchichas S.A. Rome Italië
4 Folies gourmandes Nancy Parijs
5 Ernst Handel Parijs Frankrijk
En een tabel Bestellingen:
Klant-id Bestelling-id Besteldatum
1 10698 10-5-2012
1 10512 11-5-2012
3 10725 10-5-2012
4 10763 13-5-2012
4 10408 12-5-2012
Maak nu een standaard query:
Code:
SELECT Bedrijfsnaam FROM Bestellingen INNER JOIN Klanten ON Bestellingen.[Klant-id] = Klanten.[Klant-id];
Deze levert als resultaat:
Bedrijfsnaam
Ernst Handel
Ernst Handel
FISSA Fabrica Inter. Salchichas S.A.
Folies gourmandes
Folies gourmandes
Je ziet dat voor elk record uit [Bestellingen] een klantrecord wordt gemaakt. De query is te bewerken.
Met DISTINCT halen we de unieke waarden uit de recordset. Die bestaat uit één veld, dus er wordt naar één veld gekeken.
Code:
SELECT DISTINCT Bedrijfsnaam FROM Bestellingen INNER JOIN Klanten ON Bestellingen.[Klant-id] = Klanten.[Klant-id];
Resultaat:
Bedrijfsnaam
Ernst Handel
FISSA Fabrica Inter. Salchichas S.A.
Folies gourmandes
Kijken we nu naar de unieke records; dat zijn dus complete unieke records uit Klanten en Bestellingen.
Bedrijfsnaam
Ernst Handel
FISSA Fabrica Inter. Salchichas S.A.
Folies gourmandes
Ernst Handel
Je ziet Ernst Handel er nu twee keer in staan; dat komt omdat er in KLANTEN twee records zijn voor dit bedrijf; één voor het filiaal in Berlijn, en één voor Parijs. Zoals gezegd: de resultaten zijn nu wèl te bewerken, in tegenstelling tot een DISTINCT query.
Samenvattend: DISTINCT kijkt naar de unieke resultaten in de query op basis van de geselecteerde
velden, DISTINCTROW kijkt naar de unieke resultaten in de query op basis van de geselecteerde
tabellen.
Hopelijk is het nu wat duidelijker...