Mysql can might return 1 or 2 for a single row upsert (special mysql exception to distinguish update/create that predated RETURNING), whereas sqlite will return 1 (1 row updated or created).
I think the sqlite/postgres value makes more sense. With, REPLACE it is more defensible returning 2 since it is DELETE + INSERT, though that is not consistent with sqlite either.