If you go with the puffer, then you still have to fish the snails out. Some folks will tell you that clown loaches eat snails (and they do) but they also get about a foot long. However, most other loaches shaped like clown loaches also eat snails. I kept at 20 gallon high free of visible snails for 3 weeks with three young striped loches. They took it from biblical plague proportions to just enough snails left that they came back when I moved the loaches out.
So, if you have room for 3 fish that will top out around 4", stirped loaches (botia striata) are one way to go. Burmese Border Loaches and Yoyo Loaches also work, in my experience, but get slightly larger (5 and 6" respectively). Botia sidthimunki ought to work, but I don't have that kind of money to spend ($20+ each, and you need a school of 6 or more). They stay around 2". Skunk Loaches are in a good size range for a 20 gallon tanks (2-3") but they are pretty aggressive, and will put a hurt on any fish that they take a dislike to.
THe other thing about loaches and snails: If you have malaysian trumpet snails, loaches generally leave them alone-something about the shape of the shell usually defeats loach snail killing tactics. Also, loaches eat the snail out of the shell, so you'll need to vacuum up the empty shells to keep your water from getting hard.