SQLite Forum

Does table have rowid?
> The trick here is that a non-rowid table (that is to say a WITHOUT ROWID table) is really implemented as a stand-alone index

This is interesting. Especially the misleading error message generated if an index with the same name already exists. Example:

drop table if exists t1;
create table t1 (a);
create index i1 on t1(a);

drop table if exists i1;
create table i1 (a primary key) without rowid;

Even though there is no table `i1` this fails with the following error message:

there is already a table named i1

I would have looked forever for this table did I not know that `i1` in fact conflicts with an index.