I'm surprised that I can get you a really good chronology for why this is here, as it is some very old stuff.
Here's the SQLAlchemy changeset which added that logic, including the test, which was failing at that time:
The issue at that time was specifically the PRAGMA foreign_key_list(), for a table setup like the one in that test, would come back like this (I'm able to reproduce on a very old sqlite I was lucky enough to find):
sqlite> pragma foreign_key_list(django_admin_log);
0|0|"django_content_type"|content_type_id|id
on a modern sqlite, we get the correct result without the quotes:
sqlite> pragma foreign_key_list(django_admin_log);
0|0|django_content_type|content_type_id|id|NO ACTION|NO ACTION|NONE
aaaaand, the bug can also be traced to sqlite, where it was fixed in April of 2009, so this would be fixed as of sqlite 3.6.14:
So one thing to note is, the change we made was overly defensive; the quoting issue, per my testing on that old sqlite version just now, is limited to just the foreign_key_list().
i dont think any other dialects have something like this going on, though using the column quote character *in* the column name is sure to not be supported by many other databases. while I can adjust SQLA for this particular bit of history, it's generally poor form to have the quotes in the name like that.