While I agree it's a surprising result the [documentation for expressions](https://www.sqlite.org/lang_expr.html) also states in part: > The result of any binary operator is either a numeric value or NULL, except for the \|\| concatenation operator which always evaluates to either NULL or a text value. Thus concatenating any two non-null values will always yield text even if the value is invalid for the database encoding.