I find the opposite effect: asql> explain query plan with lucky(lucky) as (select val from numbers order by random() limit 50) select sum(exists(select 1 from lucky where val = lucky)) from numbers; id parent notu deta ---- ------------- ---- ---- 3 0 0 SCAN TABLE numbers 5 0 0 CORRELATED SCALAR SUBQUERY 8 5 0 CO-ROUTINE 0x19668760 12 8 0 SCAN TABLE numbers 24 8 0 USE TEMP B-TREE FOR ORDER BY 41 5 0 SEARCH SUBQUERY 0x19668760 USING AUTOMATIC COVERING INDEX (lucky=?) asql> explain query plan with lucky(lucky) as (select val from numbers order by random() limit 50) select sum(exists(select 1 from lucky where val = +lucky)) from numbers; id parent notu deta ---- ------------- ---- ---- 3 0 0 SCAN TABLE numbers 5 0 0 CORRELATED SCALAR SUBQUERY 8 5 0 CO-ROUTINE 0x19667CE0 12 8 0 SCAN TABLE numbers 24 8 0 USE TEMP B-TREE FOR ORDER BY 31 5 0 SCAN SUBQUERY 0x19667CE0 https://sqlite.org/optoverview.html states "Terms of the WHERE clause can be manually disqualified for use with indices by prepending a unary *+* operator to the column name."