I feel like “D&D races that are unusually good at specific classes” are a problem that a DM needs to keep in mind.
Think about it: if a thief needs dexterity, and there’s a race (let’s say halfling) that gives a hefty bonus to dexterity, there really is no practical reason a player should not play that race if he wants to play a thief.
Of course, he doesn’t HAVE to, and he might prefer the idea of playing, say, for example, a human thief, for fluff reasons.
But still, the very idea of having a situation where you can say “A is strictly better than B. But, you know, you can just pick B anyway” sounds like bad game design.
B/X sidestepped the entire issue by having racial classes - that is, “Elf, Dwarf and Halfling are classes”. I know a lot of people who deride it for that, but it was a simplified product aimed at new players and kids.
4th edition approached the problem in a very interesting way: it spread out bonuses generously across various ability scores and offered a large number of different classes, races and builds. That way you don’t have to feel like there is ONE optimal choice for what you want to do: there usually are several.
However, I think that the best way to differentiate races and make them interesting is not by increasing ability score numbers, or giving them anything that says “this race is the wizard race, this other race is the fighter race, and this other race is the thief race”.
Give each race something that EVERY class could use.
All elves treat encounters with fairies and fey creatures as automatically friendly. All dwarves can focus for 10 minutes on a surface of natural rock and Stone Shape it once per day. Tiefling have a third eye that lets them peer into the future and make one prophecy per week, which are 100% correct but always omit one detail. Dryads never get lost in forests or woodlands and can move without leaving tracks, and extend the benefit to the entire party. Humans have a flat 20% chance of guessing and immediately identifying any magical item they come in contact with.
The best racial powers, for me, are:
1) Informative. The fact that everyone in that race has that ability tells you something interesting about that race’s biology, culture, or such.
2) Non-additive. They don’t add or stack to traits that are already present. (Increased ability scores, saving throws, etc), or, if they do, they add to secondary or circumstantial traits. (a +2 to saving throws against electricity is better than a flat +2 to all saves)
3) Non-offensive. They are, preferably, either utility or defensive. Possible exceptions might be natural weapons like claws or a bite, but I feel like such attacks should never outmatch normal weaponry, and remain in the realm of back-up weapons.