<p>In DB2, you can name a column ORDER and write SQL like</p>

<pre><code>SELECT ORDER FROM tblWHATEVER ORDER BY ORDER
</code></pre>

<p>without even needing to put any special characters around the column name.  This is causing me pain that I won't get into, but my question is:  why do databases allow the use of SQL keywords for object names?  Surely it would make more sense to just not allow this?</p>

Many SQL parsers (expecially DB2/z, which I use) are smarter than some of the regular parsers which sometimes separate lexical and semantic analysis totally (this separation is mostly a good thing).
The SQL parsers can figure out based on context whether a keyword is valid or should be treated as an identifier.
Hence you can get columns called ORDER or GROUP or DATE (that's a particularly common one).
It does annoy me with some of the syntax coloring editors when they brand an identifier with the keyword color. Their parsers aren't as 'smart' as the ones in DB2.