I did an EXPLAIN on those 2 statements and the only difference it displayed was a String8 opcode in the first became a Variable opcode in the second. I assume the vdbe skips a lot of sanity checks when processing a literal versus a variable binding (are mutexes involved?).