As in bash, in zsh, this works:
printf '%s ' {2..23..3}; echo
As this also work:
set   -- {2..23..3}
for   i
do    echo "$i"
done
As this:
set   -- {2..23..3}
for i; do
      echo "$i"
done
As your code workthis:
for i in {0..20..2}
do
    echo "$i"
done
What works in zsh but not in bash is ranges with variables:
a=2 b=23 c=3
set   -- {$a..$b..$c}
for   i
do    echo $i
done