How are you determining what products are non-seasonal? I see that the Products table includes an IsSeasonal column, but its value is FALSE in every row, so that can't be used. My query is predicated on non-seasonal being where there are no matching rows in MonthAvailable, so if we count those products with the following query:
SELECT COUNT(*)
FROM Products
WHERE NOT EXISTS
(SELECT *
FROM MonthAvailable
WHERE MonthAvailable.ProductID = Products.ProductID);
This returns a count of 646.
If we count the products which are available in the current month (February) with the following query:
SELECT COUNT(*)
FROM Products INNER JOIN MonthAvailable
ON MonthAvailable.ProductID = Products.ProductID
WHERE MonthAvailable = MONTH(DATE());
This returns 44.
So, adding the two gives us a total of 690 which is, as I'd expect, the number of rows returned by my first query.
The other possibility is that you are defining a product as non-seasonal where it has 12 matching rows in MonthAvailable, i.e. all months, which can be returned with this query:
SELECT Products.ProductID,ProductName
FROM Products INNER JOIN MonthAvailable
ON MonthAvailable.ProductID = Products.ProductID
GROUP BY Products.ProductID,ProductName
HAVING COUNT(*) = 12;
This returns 3 products only. In this case the following query would return all non-seasonal products and those available in the current month:
SELECT
DISTINCT Products.*
FROM Products INNER JOIN MonthAvailable ON Products.ProductID = MonthAvailable.ProductID
WHERE MonthAvailable = MONTH(DATE())
OR EXISTS
(SELECT MonthAvailable.ProductID
FROM MonthAvailable
WHERE MonthAvailable.ProductID = Products.ProductID
GROUP BY MonthAvailable.ProductID
HAVING COUNT(*) = 12);
This returns 44 products. However, this begs the question as to what is the seasonal/non-seasonal status of the large number of products with no matching rows in MonthAvailable? In relational database terms the answer is NULL. However, NULL is not a value, but the absence of a value so is semantically meaningless.