Clickhouse Server version: 22.3.2.1 and 21.6.5.37

Minimal Reproducible Code: 
`select
	arrayJoin(arrayDifference(groupArray(nb))) as res
from
	(
select
		toUInt32(number % 11) as nb
	from
		numbers(100))`

When I using arrayDifference function on an array of UInt32 elements, I get huge numbers around 2^32 instead of expected negative numbers.   
The same function works properly on Uint8, Uint16 and even Uint64.

And also I found 
> `The type of elements in the resulting array is determined by the type inference rules for subtraction (e.g. UInt8 - UInt8 = Int16).`

in document at [https://clickhouse.com/docs/en/sql-reference/functions/array-functions/#arraydifference](url)

So it seems like an unexpected result, but I'm not sure. Hoping for your anwser! 
#include <Columns/ColumnDecimal.h>
#include <Columns/ColumnsNumber.h>
#include <DataTypes/DataTypesDecimal.h>
#include <DataTypes/DataTypesNumber.h>
#include <Functions/FunctionFactory.h>
#include "FunctionArrayMapped.h"
namespace DB
{
namespace ErrorCodes
{
    extern const int ILLEGAL_TYPE_OF_ARGUMENT;
    extern const int ILLEGAL_COLUMN;
    extern const int DECIMAL_OVERFLOW;
}
/** arrayDifference() - returns an array with the difference between all pairs of neighboring elements.
  */
struct ArrayDifferenceImpl
{
    using column_type = ColumnArray;
    using data_type = DataTypeArray;
    static bool needBoolean() { return false; }