This is not an easy to answer question. It mainly depends on your performance requirements. If 20 fields makes performance slow to a crawl then it is too many.
The bigger issue is not the number for fields (columns) but the number of rows returned. If you have 20 fields with 10 rows, performance should be just fine. But if you have 20 fields with 100,000 rows, chances are you'll be waiting a while for the view to be displayed, and performance within the form will not be that great.
There's really not one set answer. But I can tell you that the number of rows will have a bigger affect on performance than the number of fields (columns).
Greg Collins [InfoPath MVP]
InfoPath Dev