I have the following data in the table
I am confused why are you expecting the second row in the result set. Is it something loose range searching (either by from_date or by to_date)?
You can try something like that:
SELECT * FROM your_table WHERE from_date >= startDate AND IF(to_date IS NULL, TRUE, to_date <= endDate);
endDate are the dates in your given range.
SELECT * FROM your_table WHERE '2015-10-30' BETWEEN from_date AND COALESCE(to_date,CURDATE()) OR '2016-08-08' BETWEEN from_date AND COALESCE(to_date,CURDATE())