Isso porque você está usando uma expressão regular que significa "corresponde a 0 ou mais números". A string abc
corresponde a 0 números, então você obtém um resultado positivo. Basta remover o *
("0 ou mais") e ele deve funcionar como esperado:
set a "a2bc"
if {[ regexp {[0-9]} $a ]} {
puts "Found number in $a"
} else {
puts "Doesn't find number in $a"
}