```
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]
```
1. Result from dict get can be tuple if client requested multiple attributes we apply such operation on each result column.
            2. If column is already nullable we merge column null map with null map that we get from dict has.
          */
        auto dict_has_arguments = filterAttributeNameArgumentForDictHas(arguments);
        auto is_key_in_dictionary_column = dictionary_has_func_impl.executeImpl(dict_has_arguments, std::make_shared<DataTypeUInt8>(), input_rows_count);
        auto is_key_in_dictionary_column_mutable = is_key_in_dictionary_column->assumeMutable();
        ColumnVector<UInt8> & is_key_in_dictionary_column_typed = assert_cast<ColumnVector<UInt8> &>(*is_key_in_dictionary_column_mutable);
        PaddedPODArray<UInt8> & is_key_in_dictionary_data = is_key_in_dictionary_column_typed.getData();
        for (auto & key : is_key_in_dictionary_data)
            key = !key;
        auto dictionary_get_result_type = dictionary_get_func_impl.getReturnTypeImpl(arguments);
        auto dictionary_get_result_column = dictionary_get_func_impl.executeImpl(arguments, dictionary_get_result_type, input_rows_count);
        ColumnPtr result;
        WhichDataType dictionary_get_result_data_type(dictionary_get_result_type);
        auto dictionary_get_result_column_mutable = dictionary_get_result_column->assumeMutable();
        if (dictionary_get_result_data_type.isTuple())
        {
            ColumnTuple & column_tuple = assert_cast<ColumnTuple &>(*dictionary_get_result_column_mutable);
            const auto & columns = column_tuple.getColumns();
            size_t tuple_size = columns.size();
            MutableColumns new_columns(tuple_size);
            for (size_t tuple_column_index = 0; tuple_column_index < tuple_size; ++tuple_column_index)
            {
                auto nullable_column_map = ColumnVector<UInt8>::create();
                auto & nullable_column_map_data = nullable_column_map->getData();
                nullable_column_map_data.assign(is_key_in_dictionary_data);
                auto mutable_column = columns[tuple_column_index]->assumeMutable();
                if (ColumnNullable * nullable_column = typeid_cast<ColumnNullable *>(mutable_column.get()))
                {
                    auto & null_map_data = nullable_column->getNullMapData();