**Describe the bug**
Using a `NULL` tuple as a left operand with a chained or operands produce an invalid ClickHouse filtering.

**Does it reproduce on recent release?**
Can be reproduced with `21.2.2.8`

**How to reproduce**
```
SELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1)

Received exception from server (version 21.2.2):
Code: 53. DB::Exception: Received from 127.0.0.1:10000. DB::Exception: Type mismatch in IN or VALUES section. Expected: Nothing. Got: UInt64: While processing (NULL, NULL) IN ((0, 0), (3, 1), (3, 2), (8, 0)). 
```

**Expected behavior**
It should return `NULL`, or at least the same output as `equals(tuple(NULL, NULL), tuple(3, 2))`
{
    auto field = from.get<DecimalField<From>>();
    T value = convertDecimals<DataTypeDecimal<From>, DataTypeDecimal<T>>(field.getValue(), field.getScale(), type.getScale());
    return DecimalField<T>(value, type.getScale());
}
template <typename To>
static Field convertDecimalType(const Field & from, const To & type)
{
    if (from.getType() == Field::Types::UInt64)
        return convertIntToDecimalType<UInt64>(from, type);
    if (from.getType() == Field::Types::Int64)
        return convertIntToDecimalType<Int64>(from, type);
    if (from.getType() == Field::Types::String)
        return convertStringToDecimalType(from, type);
    if (from.getType() == Field::Types::Decimal32)
        return convertDecimalToDecimalType<Decimal32>(from, type);
    if (from.getType() == Field::Types::Decimal64)
        return convertDecimalToDecimalType<Decimal64>(from, type);
    if (from.getType() == Field::Types::Decimal128)
        return convertDecimalToDecimalType<Decimal128>(from, type);
    throw Exception("Type mismatch in IN or VALUES section. Expected: " + type.getName() + ". Got: "
        + Field::Types::toString(from.getType()), ErrorCodes::TYPE_MISMATCH);
}
Field convertFieldToTypeImpl(const Field & src, const IDataType & type, const IDataType * from_type_hint)