The sqlite3_vtab_nochange() function is an optimization. Virtual tables should continue to work even if sqlite3_vtab_nochange() always returns false. (If they do not, then that is a bug in the virtual table implementation.) As it happens, sqlite3_vtab_nochange() does always return false for an UPDATE-FROM statement.