Da SQLite nicht wirklich typsicher ist, kann man da viel Mist bauen.
Bei deiner Abfrage wird das INT wohl auch als Integer behandelt und dann der "ungültige" Wert in eine 0 konvertiert,
scheinbar leider ohne jegliche Fehlermeldung/Warnung.
Das WHERE wird aber ohne Cast ausgeführt und bekommt halt mit, dass der "Text" keine 0 ist.