First, the guy was totally out of line to behave like that when he found out. That's completely unprofessional and wrong.
Second, if I was filling out paperwork and going to a company site, yeah, I'd absolutely assume I was getting paid. You've in a business environment, there's no clue to lead you to believe that you are not being paid.
I think that's something you should tell people right up front "you have the job but there's a one-day training session that is not paid." I would state it explicitly so there's no misunderstanding. If someone objects and refuses to show up for an unpaid session, well, then you'll weed out the troublemakers right away.