**Describe the unexpected behaviour**
maxMap is removing entries with empty string or zero value.

**How to reproduce**

String array
SELECT maxMap(a, b) from values ('a Array(String), b Array(String)',(['A'],['']),(['B'],['']));

┌─maxMap(a, b) ─┐
│ ([],[])                    │ 
└───────────┘

Numeric array
`SELECT maxMap(a, b) from values ('a Array(String), b Array(UInt64)',(['A'],[0]),(['B'],[0]));

┌─maxMap(a, b) ─┐
│ ([],[])                    │ 
└───────────┘
`
It happens with all versions published.

**Expected behavior**
We expect this to maintain those keys with its value (empty string or zero).

{
        DataTypes types;
        types.emplace_back(std::make_shared<DataTypeArray>(keys_type));
        for (const auto & value_type : values_types)
        {
            DataTypePtr result_type;
            if constexpr (overflow)
            {
                
                
                result_type = value_type;
            }
            else
            {
                auto value_type_without_nullable = removeNullable(value_type);
                
                if (!value_type_without_nullable->canBePromoted())
                    throw Exception{ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT,
                        "Values for {} are expected to be Numeric, Float or Decimal, passed type {}",
                        getName(), value_type->getName()};
                result_type = value_type_without_nullable->promoteNumericType();
            }
            types.emplace_back(std::make_shared<DataTypeArray>(result_type));
        }
        return std::make_shared<DataTypeTuple>(types);
    }
    static const auto & getArgumentColumns(const IColumn**& columns)