Thanks for the replies guys...
In a quick glance, here was one query I found (from post.php):
$result = $db->query('SELECT poster, message FROM '.$db->prefix.'posts WHERE id='.$qid) or error('Unable to fetch quote info', __FILE__, __LINE__, $db->error());
So, it prevents having to join the users table into the query when fetching a quote
What's wrong with joining the users table? It's a single lookup in a BTREE index. The cost should be negligible.
On the other hand, every time the posts table is accessed in a way that can't be wholly covered by the index, all those username fields are being read from disk and taking up any memory cache space. This probably has a higher overall cost than the above.
I'm not saying you're wrong (I only joined today so it would be a bit rude anyway!), but I would caution against assuming joins are bad (unless it's already been performance tested). In general, smaller tables and more joins is better.
The poster column is needed for guest posts.
Oops, I'd forgotten about this functionality (because personally I probably won't use it...)
Well I guess if the column were made nullable and only used for anonymous posts, then it shouldn't hurt.