```
create table default.test_parent
(
    id        UInt64,
    parent_id Nullable(UInt64)
) engine = MergeTree

create dictionary default.d4test_parent
    ( id UInt64,
    parent_id  Nullable(UInt64) HIERARCHICAL
    )
    PRIMARY KEY id
    SOURCE (CLICKHOUSE(DB 'default' TABLE 'test_parent'))
    LIFETIME (MIN 0 MAX 0)
    LAYOUT (HASHED)
;
insert into default.test_parent
values (1, null),
       (2, 3),
       (3, 1),
       (4, 2)
;
system reload dictionary default.d4test_parent
;
select dictGetDescendants('default.d4test_parent', toUInt64(2))
;
```

Code: 53. DB::Exception: default.d4test_parent (443f6664-e217-44ec-80e2-bbec982b4963): type mismatch: column has wrong type expected UInt64: While processing dictGetDescendants('default.d4test_parent', 2). (TYPE_MISMATCH) (version 22.3.2.1)


On old versions no errors
```
select version()
-- 21.11.6.7
;
select dictGetDescendants('default.d4test_parent', toUInt64(2))
-- [4]
```
{
        auto result_type = dictionary_get_func_impl.getReturnTypeImpl(arguments);
        WhichDataType result_data_type(result_type);
        if (result_data_type.isTuple())
        {
            const auto & data_type_tuple = static_cast<const DataTypeTuple &>(*result_type);
            auto elements_types_copy = data_type_tuple.getElements();
            for (auto & element_type : elements_types_copy)
                element_type = makeNullable(element_type);
            result_type = std::make_shared<DataTypeTuple>(elements_types_copy, data_type_tuple.getElementNames());
        }
        else
            result_type = makeNullable(result_type);
        return result_type;
    }
    ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override
    {
        if (input_rows_count == 0)
            return result_type->createColumn();
        /** We call dictHas function to get which map is key presented in dictionary.
            For key that presented in dictionary dict has result for that key index value will be 1. Otherwise 0.
            We invert result, and then for key that is not presented in dictionary value will be 1. Otherwise 0.
            This inverted result will be used as null column map.
            After that we call dict get function, by contract for key that are not presented in dictionary we
            return default value.
            We create nullable column from dict get result column and null column map.
            2 additional implementation details: