Unbraced expr is the one Tcl habit I'd ban if I could! It looks like a style nit and it isn't.
set qty {[puts "side effect"; list 3]}
puts [expr {$qty == 3}]
puts [expr $qty == 3]
The braced line prints 0. The bytecode compiler sees $qty == 3 as an expression, reads the variable once, and compares a weird string with 3. The unbraced line prints side effect and then 1. Tcl substitutes $qty while building the command words, expr gets the text [puts "side effect"; list 3] == 3, and then does its own round of substitution, which runs the bracketed command. Two substitutions, and the second one executes whatever the variable held.
That's the fun part. The quieter part is speed, because the unbraced form can't be compiled ahead and gets parsed each time it runs. Checked on 9.1 here, but this has been true for a very long time.