Another difference between the two inputs that's often overlooked: If a radio-button isn't selected, it isn't passed along on the form submit. Or to look at it another way, radio buttons offer the option of not selecting any options.
With a dropdown (select box), you might have an option with no value (blank, "") and make it the default, but if a user leaves this option untouched, they are effectively saying "my answer is blank", since the form passes along "my_input_name : ''". By having a radio button, you can offer an option like "N/A" or "None of the above" that a user can explicitly choose and therefore distinguish between the user selecting "-blank-" and a user skipping the question / opting to not answer (This distinction becomes a real pickle in lower-level DB logic when distinguishing between a field stored with value NULL versus empty (blank) value).
On the flipside of this feature of radio buttons is something else that's often forgotten about radio buttons: you can't un-answer the question. If you have a radio fieldset like:
Gender : Male () Female ()
a user can skip over the question and the field is not even passed along as blank. But if a user selects male, well now they are stuck. They can either change the answer to female, or leave it as male. (For HTML forms, they can also learn a little bit about using their browser console, but that falls outside of UI/UX design and into programming and security).
So with this "no take backs" feature of radio buttons, you end up with a few options that a dropdown wouldn't provide:
- Ability to distinguish "didn't answer" from "my answer is blank"
Ability to present all options without forcing a blank or default option. With dropdowns, you either have to make blank an option and then deal with that option not actually being a valid user choice, or pre-select an option for the user (like the first option on the list), which has the risk of being unintentionally submitted if the user neglects to make a selection (maybe they meant to come back to it, maybe they didn't see it), or if it is left unselected intentionally due to the lack of a blank option. In either case, the data is now less valuable since the "default" option may or may not be the true answer (if you don't believe me, query your data to get a ratio of rows with the default option for the field versus rows with another option. You'll be stunned at how many people apparently live in Alabama when it's the default option).
Better control over handling form validation, specifically "required" fields. There is no such thing as required dropdown field. There are only dropdown fields where the blank option is not valid. Obviously it would be better to provide a dropdown of states with a blank option and treat the blank as not selecting a state, rather than blow out your form to avoid a blank option, but for questions that have 4-5 responses at most, it's better to provide the full list of options rather than use a dropdown with a blank option that isn't really an option and then have to deal with distinguishing blank from unselected.
Bonus opinion:
By the same token as the above ideas, it is also really dumb to use dropdowns instead of checkboxes. A dropdown with options "Yes/No" or "True/False" makes me roll my eyes every time. The only reason to use a dropdown is if you provide a third blank option and it's considered a valid selection. And even then, a radio button would probably be the better choice.