c # IDataReader SqlDataReader diferença

Alguém pode me dizer a diferença entre esses dois pedaços de código? Por que usar o IDataReader?

using (IDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // get data from the reader
    }
}

using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        // get data from the reader
    }
}