Eu acho que isso é chamado de precisão flutuante. Você pode encontrá-lo em quase todas as linguagens de programação e também no Banco de Dados. Isso ocorre porque os dados são armazenados apenas com alguma precisão e, na verdade, o que você define como
8.31
provavelmente não é 8.31
mas por exemplo 8.31631312381813
e quando multiplicá-lo e ceil, pode fazer com que apareçam valores diferentes. Em página de documentação do servidor SQL você pode ler:
Em outros sistemas de banco de dados existe o mesmo problema. Por exemplo, no site do mysql você pode ler: