При добавлении числа в строку, которая не является числом, будет возвращено число.
'foo' + 42 = 42
И поскольку вы выбираете MAX(ID)
, он возвращает 'xxxxxxxxxx'.
Самое простое решение для этого - настроить этот расчет нанемного.
SELECT max(ID+1) from yourtable
Потому что таким образом, 1, который возвращается из этого 'xxxxxxxxxx' + 1, не будет MAX.
Или выберите те, которые выше 0.
select LPAD(MAX(ID)+1, 10, '0')
from yourtable
where id > 0