Een relatie is een koppeling tussen twee tabellen, gebaseerd op een bepaalde afhankelijkheid van de tabellen onderling. Je maakt een relatie door een veld uit tabelA te slepen naar het overeenkomende veld in tabelB.
Als voorbeeld een tabel Klanten, en een tabel Facturen: Elke klant is uniek, en krijgt een uniek nummer, KlantID. Een factuur is voor een bepaalde klant, en elke klant kan meer dan één factuur krijgen, als hij meer koopt of bestelt. De factuur is dus afhankelijk van de klant. In de tabel Factuur neem je dus het veld KlantID op, zodat je weet welke klant welke factuur ontvangt.
Om te voorkomen dat een klantD meer dan één keer wordt ingevoerd, wat tot dubbele records zou leiden, maak je van het veld KlantID een
Sleutelveld. Hiermee geef je aan dat een KlantID maar één keer mag worden gebruikt.
Uiteraard mag een klant meerdere facturen ontvangen, dus in de tabel Facturen zal het veld KlantID geen sleutelveld zijn. Zou je dat wel doen, dan mag een klant maar één factuur krijgen. Is niet handig

Ga je een relatie leggen tussen de twee tabellen, dan moet je, om de relatie goed te laten werken, de optie <Refefentiële integriteit afdwingen> selecteren, anders werkt de relatie niet goed. Deze optie zorgt er voor, dat je in de tabel Facturen geen klantID kunt invoeren dat nog niet bestaat in de tabel Klanten. Lijkt logisch: je gaat geen factuur maken voor een klant die je niet hebt. Toch?
Als je de relatie op deze manier hebt gemaakt, zul je zien dat de tabel Klanten een 1-teken heeft gekregen, en de tabel Facturen een oneindig teken (gekantelde 8). Hiermee duidt Access een één-op-veel relatie aan: één klant kan veel facturen krijgen.
In bijgaand plaatje zie je iets soortgelijks voor Artiesten en songs.
Als je een query maakt, kun je, zeker voor je gevoel, hetzelfde doen: je sleept een veld uit tabelA en laat het los op een veld uit tabelB.
Wat is nu het verschil? Het is geen relatie, zoveel is wel duidelijk...
Bij het koppelen van velden in een query zeg je tegen Access: ik wil alle records zien, waarvan de velden die ik aan elkaar heb gekoppeld hetzelfde zijn. Of dat lukt of niet, hangt eigenlijk van de waarden in je query af.
Voorbeeld: je hebt in tabelA 3 records gemaakt, met de breedtes 5,8 en 10. In tabelB heb je de hoogte in een veld ingevoerd: 8,10 en 12.
Als je het veld Breedte uit tabelA koppelt aan het veld Hoogte uit tabelB, krijg je 2 records terug: de records met de waarden 8 en 10. Dit zijn de enige 2 records met een waarde die in beide tabellen voorkomt.
In jouw voorbeeld heb je blijkbaar genoeg getallen zijn die overeenkomen, vandaar dat het resultaat correct lijkt te zijn.
Als je, wat je blijkbaar gedaan hebt, in Relaties het veld Breedte hebt gekoppeld aan het veld Hoogte, en je hebt de optie <Referentiële integriteit afdwingen> niet geselecteerd, leg je relatie die in wezen waardeloos is. Access kan daar niks mee. Maak je nu een query, en je selecteert weer de velden Breedte en Hoogte, dan weet Access niet hoe de gegevens moeten worden gekoppeld. Wat doet Access nu?
Eigenlijk heel simpel: Access begint met het eerste record uit tabelA, en zet de eerste waarde uit tabelB erbij. Vervolgens weer het eerste record uit tabelA, maar nu met het tweede record uit tabelB. Daarna het eerste record uit tabelA, met het derde record uit tabelB, en zo voort.
Als alle records uit tabelB zijn gekoppeld aan het eerste record uit tabelB, begint het verhaal opnieuw, maar nu met het tweede record uit tabelA als basis. Net zo lang tot alle records uit tabelA zijn gekoppeld uit alle records uit tabelB.
In jouw voorbeeld heb je 10 records in tabelA, en blijjkbaar ook 10 records in tabelB. 10x10=100.... Vandaar de 100 records. Allicht dat de juiste daar wel tussen zit....
Waarschijnlijk zijn beide resultaten overigens fout, want ik vermoed dat je de twee tabellen niet op deze manier aan elkaar kunt koppelen. Waarom je overigens van één object de lengte en de breedte apart wilt opslaan, ontgaat mij, maar je zal daar (hopelijk) wel een reden voor hebben...
Om de twee tabellen goed te laten werken, heb je dus een constructie nodig waarbij je in tabelA de breedte noteert, en een uniek veld ObjectID nodig hebt voor de identificatie voor de obecten.
In tabelB heb je een veld nodig voor de hoogte, en ook het veld ObjectID, om de breedte van een object te kunnen koppelen aan de hoogte
van hetzelfde object. In tabelb moet het ObjectID dus ook een sleutelveld zijn, omdat een object (neem ik aan) maar één hoogte kan hebben...
In het scherm Relaties kun je de twee tabellen nu aan elkaar koppelen, waarbij je dus het veld ObjectID uit tabelA koppelt aan ObjectID uit tabelB.
Omdat in beide tabellen het ObjectID een sleutelveld is, maakt Access een één-op-één relatie voor je.
Nu kun je perfecte queries maken, met altijd de goede uitkomst.
Hopelijk is het nu wat duidelijker (anders heb ik mij voor niks het klapper getiklt...)