Baseado em documentos SQLite: https://www.sqlite.org/datatype3.html#type_conversions_prior_to_comparison , especialmente esta declaração:
Se um operando tiver afinidade INTEGER, REAL ou NUMERIC e o outro operando tiver TEXT ou BLOB ou nenhuma afinidade, a afinidade NUMERIC será aplicada ao outro operando.
Eu esperaria a seguinte consulta:
CREATE TABLE t (id integer primary key, str varchar(20));
INSERT INTO t (id, str) VALUES (1, '5'), (2, '5u');
SELECT id, 5 = str, 5 >= str, CAST(5 AS NUMERIC) >= str, CAST(str AS NUMERIC) FROM t;
para retornar 5 >= str
= 1
para ambas as linhas, pois o operando do lado esquerdo tem afinidade NUMERIC.
Demonstração: http://sqlfiddle.com/#!5/e9c19/4
Acho que você pode estar perdendo essa parte :
(grifo meu).