The create_table/3 function will cast all table names to binaries, allowing them to be given as atoms, binaries or strings. In order to recall what the original type was, the CREATE TABLE statement includes a constant CHECK constraint, e.g. CHECK('bin'='bin'), which is then parsed by the list_tables function. The constraint is put last in the statement, and should not interfere with any other constraints. Hopefully, the sqlite compiler is good enough that this constant expression doesn't add too much overhead. :)
Table names get converted into iolists anyway, and in some applications, it is undesireable to have to create atoms for dynamic table names.