Here is a patch: ~~~ Index: src/vdbe.c ================================================================== --- src/vdbe.c +++ src/vdbe.c @@ -4938,11 +4938,11 @@ rc = sqlite3BtreeLast(pC->uc.pCursor, &res); if( rc!=SQLITE_OK ){ goto abort_due_to_error; } if( res ){ - v = 1; /* IMP: R-61914-48074 */ + v = 0; }else{ assert( sqlite3BtreeCursorIsValid(pC->uc.pCursor) ); v = sqlite3BtreeIntegerKey(pC->uc.pCursor); if( v>=MAX_ROWID ){ pC->useRandomRowid = 1; ~~~ The comment on the old line indicates that the use of 1 is documented behavior: * ["If the table is initially empty, then a ROWID of 1 is used."](https://www.sqlite.org/autoinc.html) And because it is documented, that means it won't change without a very good reason. But you can make the change in your own private copies of SQLite, if you want.