Two (almost) identical queries, but only one of them uses the index
If the table is InnoDB, here is what's happening:

The query optimizer sees SELECT * and does this


Sees all columns are included in the SELECT list
Uses the clustered index since all columns are included


The query optimizer sees SELECT batch_id, study_id and does this


Sees SELECT list has two columns, not all columns
Sees the study_id index (and other indexes)
Chooses the study_id index
Retrieves batch_id using PRIMARY KEY attached to study_id index entry


Why would this happen at all? The Query Optimizer is kinda picky


Aug 13, 2013 : Why does MySQL ignore the index even on force for this order by?
Nov 13, 2012 : Must an index cover all selected columns for it to be used for ORDER BY?


Sometimes, it can go the other way


Apr 23, 2012 : Why is a secondary index chosen over a clustered index for SELECT COUNT(*) ...?


The key to your question is that the Query Optimizer does not view the two queries as almost identical. To the query optimizer, they are completely different in appearance and in its treatment.