A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
A good way to understand whether an index is useful is that you imagine that you have the data written down on paper or a plain text file in the order given by the index, and then think of how you as a human would find data in that text.
So if you have an index (IDCustomer, OrderDate) INCLUDE OrderNumber and you have the query:
SELECT IDCustomer, OrderDate, OrderNumber FROM table WHERE IDCustomer = 123
That index is perfectly usable. And if you slap on ORDER BY OrderDate, the index is even better.
But if you try the query
SELECT IDCustomer, OrderDate, OrderNumber FROM table WHERE OrderDate = '20210707'
SQL Server can no longer seek the index, since the rows with an OrderDate of July 7th are scattered all over the index. But since the index is covering, SQL Server will scan the index, but that will be from start to end.
More generally, say that you have an index on (a, b, c, d, e), and a query that goes:
SELECT ...
FROM tbl
WHERE a = @val1
AND b = @val2
AND d = @val3
AND e = @val4
SQL Server might use the index for this query, but it can only use (a, b) as seek predicates since c is absent in the WHERE clause. If you were to deal with this as a human, you may know that c can only be 0 or 1, so you would just read in two places of the list, but SQL Server does not have any rule for this, but resorts to scanning the entire range for (a,b).