Which models can handle null values?
LightGBM and XGBoost Libraries can handle missing values


LightGBM: will ignore missing values during a split, then allocate
them to whichever side reduces the loss the most 
XGBoost:   the  instance  is classified into a default    direction (the optimal default directions  are learnt from the data    somehow)


Finally, it is NOT a general property of gradient descent algorithms or tree algorithms. Only specific implementations of these algorithms have this property.

Personally, I believe that LightGBM and XGBoost can handle missing values effectively, in case one wants to keep them