I use SpamAssassin because I found that first. =) I have found that it works very well for filtering, especially when you have Pyzor, DCC, and Razor installed with it. I have procmail calling spamc and sorting mail into either "Inbox" or "Spam", without modifying the message at all. It also has a built-in Bayesian filter now, so it should get "smarter" the longer you use it. It's a content filter, so spammers can always adapt to its detections, but their whole point is to get their message out, so there's always something that can be caught.
TMDA takes a different approach. Basically the email server sends a reply back and asks if they really want to send a message. If the return address is fake or they don't answer the request, the original incoming mail gets dropped. It's not very likely, but a spammer could respond to the confirmation email. As things get a bit more sophisticated, they could probably even set up something to do it automatically. It also takes more bandwidth, since it has to reply to the sender and have them confirm it. If a spammer forged the return address, you would also be sending annoying emails to some poor sap somewhere.
Personally, I like our SA setup. Nothing gets lost, and nobody else gets bothered by it. It just sorts my mail into my IMAP folders for me. I'm also using the RBL addon for mailfront to deny incoming mail from spamming servers based on a couple blacklists. If you do this, "more /var/log/smtpfront-qmail/current |grep rblsmtpd" will show blocked connections (which should be checked occasionally).