SQLite обрабатывает логические выражения как 0
для False
и 1
для True
.Также преобразует неявно строковые значения в числа при необходимости в выражениях, таких как:
name = 'ABC' or 'XYZ'
для их оценки.Таким образом, вышеприведенное выражение эквивалентно:
(name = 'ABC') or 'XYZ'
, и поэтому 'XYZ'
неявно преобразуется в числовое значение 0
, означающее False
.Результат этого выражения:
(name = 'ABC') or False
, что эквивалентно:
name = 'ABC'
Именно поэтому оно возвращает только строки с именем 'ABC'